Spring Boot 通过 spring.profiles.active 实现多环境配置动态切换,支持 application-{profile}.yml 文件分离与条件化加载,并可通过 JVM 参数、命令行、环境变量等方式指定激活 profile,优先级从高到低。

Spring Boot 通过 spring.profiles.active 实现配置文件的动态切换,核心是按环境拆分配置(如 application-dev.yml、application-prod.yml),再通过该属性指定当前激活的 profile。
配置多环境配置文件
在 src/main/resources/ 下创建多个配置文件,命名格式为 application-{profile}.yml(或 .properties):
-
application-dev.yml:开发环境配置(如本地数据库、调试日志) -
application-test.yml:测试环境配置(如测试数据库、Mock服务开关) -
application-prod.yml:生产环境配置(如真实数据库、关闭 debug 日志) -
application.yml(主配置):通用配置 + 激活 profile 的声明
例如 application.yml 中写:
spring:
profiles:
active: dev这样默认启动时加载 application-dev.yml,同时合并 application.yml 中的公共配置。
立即学习“Java免费学习笔记(深入)”;
运行时指定激活 profile
有多种方式覆盖默认 profile,优先级从高到低:
-
JVM 参数:
-Dspring.profiles.active=prod -
命令行参数:
--spring.profiles.active=test(如java -jar app.jar --spring.profiles.active=test) -
环境变量:
SPRING_PROFILES_ACTIVE=dev -
配置文件中设置(如上面
application.yml的spring.profiles.active)
注意:多个 profile 可用逗号分隔,例如 spring.profiles.active=dev,swagger,适合启用额外功能模块。
按 profile 条件化加载配置
除了外部文件分离,也可在单个 YAML 中用 spring.profiles 块做条件分支:
server: port: 8080 <hr /><p>spring: profiles: dev logging: level: com.example: DEBUG</p><hr /><p>spring: profiles: prod logging: level: com.example: WARN
这种写法适合差异小的场景,但大型项目推荐用独立文件,更清晰、易维护、利于 CI/CD 隔离。
验证和常见问题
启动后可通过以下方式确认生效的 profile:
- 控制台日志中会打印类似
The following profiles are active: prod - 访问
/actuator/env(需启用 Actuator)查看activeProfiles字段 - 代码中注入
Environment获取:environment.getActiveProfiles()
常见问题:
- 拼写错误(如写成
proflie或大小写不一致)导致 profile 不生效 - IDE 运行配置未传参,误以为配置没起作用 —— 检查 Run Configuration 的
Program arguments或VM options - 打包后 jar 中的
application.yml覆盖了外部配置 —— 推荐将主配置外置,用--spring.config.location指定路径
不复杂但容易忽略细节,关键是统一约定命名、明确激活方式、启动时验证是否生效。


















