Spring Boot 多环境切换依靠 Profile 机制,通过 application-{profile}.yml 命名、spring.profiles.active 激活(支持启动参数/环境变量/JVM 参数/配置文件内设)、占位符 ${} 外部化敏感配置,并可结合 Actuator 或 Environment 验证生效。

Spring Boot 中实现 dev、prod 等多环境属性文件动态切换,核心是靠 Profile 机制 + 配置激活方式 + 合理的文件组织结构。不依赖额外插件,原生支持,关键在于理解“怎么命名、怎么激活、怎么覆盖”。
按约定命名配置文件
Spring Boot 会自动识别符合规则的配置文件:
-
application.yml(或application.properties):主配置,放通用项(如应用名、基础日志等) -
application-dev.yml:开发环境专属配置(如本地数据库、debug 日志) -
application-prod.yml:生产环境专属配置(如远程数据库、WARN 日志、关闭 Actuator 敏感端点)
注意:dev 和 prod 是 profile 名,必须与文件中 {profile} 部分完全一致(区分大小写),且不能含下划线或特殊字符。
用任意一种方式激活目标环境
激活哪个 profile,就加载对应 application-{profile}.yml,并合并覆盖主配置中的同名属性:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
启动参数(最常用、优先级最高):
java -jar app.jar --spring.profiles.active=prod -
环境变量:
export SPRING_PROFILES_ACTIVE=dev(Linux/macOS)或set SPRING_PROFILES_ACTIVE=test(Windows) -
JVM 参数:
java -Dspring.profiles.active=uat -jar app.jar -
在 application.yml 中写死(仅限开发/测试):
spring:<br> profiles:<br> active: dev
多个环境可同时激活,用逗号分隔,例如 --spring.profiles.active=prod,mysql,适合组合式配置(如 prod + aws + redis)。
利用占位符实现外部化敏感配置
避免把密码、地址等硬编码进 yml 文件,改用系统变量或命令行注入:
- 在
application.yml或环境文件中写:spring:<br> datasource:<br> url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/mydb<br> username: ${DB_USER:root}<br> password: ${DB_PASSWORD:} - 启动时传入:
java -jar app.jar --DB_HOST=192.168.1.100 --DB_USER=admin --DB_PASSWORD=123456 - 未传时自动回退到冒号后的默认值(如
localhost),兼顾本地调试与线上部署。
验证是否生效
加个简单日志或接口,确认当前 profile 和实际加载的配置:
- 注入
Environment对象:@Autowired<br>private Environment env;<br><br>System.out.println("Active profiles: " + Arrays.toString(env.getActiveProfiles())); - 访问
/actuator/env(需启用 Actuator)查看所有已加载的 profile 和属性来源 - 启动日志里搜索
Activated profiles,会明确打印出当前激活的 profile 列表

















