尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)

Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)
📅 发布时间:2026/7/23 19:45:49
Spring Boot Profile 多环境切换实战(springboot-properties 踩坑记录)

Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)

本文基于 springboot-learning-example 中的springboot-properties模块,记录 Spring Boot 多环境(Profile)切换的几种方式、配置优先级,以及运行测试时容易踩的两个坑。

一、项目背景

该模块演示用@ConfigurationProperties绑定自定义配置,并通过 Profile 区分开发(dev)与生产(prod)环境。启动类Application.java实现了CommandLineRunner,启动时会打印HomeProperties;HelloWorldController在/返回 "Hello,World!"。

二、Spring Boot Profile 是什么

Profile 是 Spring 提供的「按环境隔离配置」的机制。核心约定:

  • 主配置文件:application.properties
  • 环境专属文件:application-{profile}.properties(如application-dev.properties、application-prod.properties)
  • 通过spring.profiles.active指定激活哪个环境

三、本项目的多环境配置

application.properties(主,指定激活环境)

# Spring Profiles Active spring.profiles.active=prod

application-dev.properties(开发环境)

## 家乡属性 Dev home.province=ZheJiang home.city=WenLing home.desc=dev: I'm living in ${home.province} ${home.city}.

application-prod.properties(生产环境)

## 家乡属性 Prod home.province=ZheJiang home.city=WenLing home.desc=prod: I'm living in ${home.province} ${home.city}.

dev 与 prod 仅home.desc前缀不同(dev:/prod:),这正是用来验证当前激活环境的「标记」。

四、4 种切换环境的方式

优先级(高 → 低):命令行参数 / 环境变量 > 主配置文件 > 默认值。下面 4 种方式任选其一即可。

方式 1:修改主配置文件(最常用,随代码提交)

# application.properties spring.profiles.active=dev # 改成 dev / prod 即可

方式 2:运行 Jar 时传命令行参数(不改动文件,推荐部署用)

java -jar target/springboot-properties-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

方式 3:Maven 插件启动时指定(开发调试用)

mvn spring-boot:run -Dspring-boot.run.profiles=prod

方式 4:环境变量(容器 / 服务器部署最常用)

# Linux / macOS export SPRING_PROFILES_ACTIVE=prod # Windows set SPRING_PROFILES_ACTIVE=prod

五、优先级速查表

方式示例优先级适用场景
命令行参数--spring.profiles.active=prod最高临时验证、部署
环境变量SPRING_PROFILES_ACTIVE=prod高Docker / K8s
主配置文件spring.profiles.active=prod中随代码固定
默认值无最低兜底
提示:高优先级的配置会「覆盖」低优先级,所以命令行/环境变量设了 prod,就算文件里写 dev 也会生效 prod。

六、如何验证当前环境生效

启动应用后看两处:

  1. 控制台打印的HomeProperties中desc字段 —— 带dev:还是prod:前缀。
  2. 或浏览器访问http://localhost:8080/,确认接口正常返回。
HomeProperties{province='ZheJiang', city='WenLing', desc='prod: I'm living in ZheJiang WenLing.'}

七、附:运行测试时的两个隐藏坑

坑 A:mvn test测试被悄悄跳过

pom 里maven-surefire-plugin写死了<skipTests>true</skipTests>。这个值是写在<configuration>里的字面量,命令行-DskipTests=false根本覆盖不了,导致测试一直被跳过。

解决:把 pom 中skipTests改为false。

坑 B:运行 @SpringBootTest 报 NoSuchMethodError

pom 里硬编码了spring-boot-test:1.4.2.RELEASE,与父依赖spring-boot 2.1.3.RELEASE冲突,运行时抛NoSuchMethodError: SpringApplication.<init>(java.lang.Object[])。

解决:删除这个冗余依赖,spring-boot-starter-test已经带正确版本。

修复后运行单个测试方法的命令:

cd springboot-properties mvn test -Dtest=PropertiesTest#getHomeProperties

八、总结

  • 切换环境本质就是改spring.profiles.active,4 种方式按场景选。
  • 优先级记住一句话:命令行 > 环境变量 > 配置文件。
  • 用home.desc前缀这个「标记」快速验证环境是否真的切换成功。
  • 跑测试前先确认 pom 没把skipTests写死、没引冲突的老版本依赖。

相关新闻

  • 零基础小白如何去SRC平台挖漏洞赚钱?全网最全最强的干货教程一定要收藏!
  • 深入解析Tiva TM4C129X时钟与电源管理:从PLL、LDO到低功耗唤醒实战
  • 深入解析TI ePWM事件触发与故障保护机制:从寄存器到电机控制实战

最新新闻

  • ICM创芯微 CM1003-BES SOT23-6 BMS电池保护芯片
  • Claude Code架构解析:七层设计与AI工程实践
  • 主板后边为什么经常有两个以太网口?第二个网口的4种用法你绝对不知道
  • AI做会议纪要全链路拆解(从语音转写到行动项提取):实测17款工具后,这4个组合方案真正落地可用
  • 2026新余黄金回收白银回收铂金回收价格高无损耗专业鉴定本地人常去门店联系方式推荐
  • 重庆主城劳力士回收,九龙坡万象城门店出价更实在 - 融媒生活

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号