Spring Boot 多环境配置通过分离通用配置(application.yml)与环境专属配置(application-{profile}.yml)实现,支持命令行、JVM参数、环境变量及主配置文件四种激活方式,优先级递减;推荐使用占位符、环境变量注入敏感信息,并遵循YAML缩进与空格规范。

Spring Boot 多环境配置的核心是把“变的”和“不变的”分开:通用配置写在 application.yml 里,各环境专属配置(比如数据库地址、日志级别、第三方服务地址)单独拆成 application-{profile}.yml 文件,再通过激活 profile 自动加载对应那一份。
配置文件命名与存放位置
按 Spring Boot 约定,所有配置文件都放在 src/main/resources/ 下:
-
application.yml:放所有环境共用的配置,比如应用名、编码、Jackson 序列化规则、默认超时时间等 -
application-dev.yml:开发环境专用,如本地 MySQL 地址、DEBUG 日志、热部署开关 -
application-test.yml:测试环境用,连接测试库、开启 mock 支付回调、调低 Redis 连接池 -
application-prod.yml:生产环境用,真实数据库地址、INFO 日志、关闭调试端口、密码从环境变量读取
如何激活某个环境
有四种常用方式,优先级从高到低:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
命令行参数(推荐):
java -jar your-app.jar --spring.profiles.active=prod -
JVM 参数:
java -Dspring.profiles.active=test -jar your-app.jar -
环境变量:
SPRING_PROFILES_ACTIVE=dev java -jar your-app.jar -
主配置文件中写死(仅限开发阶段):
spring: profiles: active: dev放在application.yml顶部
多个 profile 可用逗号分隔,例如 --spring.profiles.active=prod,metrics,会依次加载 application.yml → application-prod.yml → application-metrics.yml,后加载的覆盖同名项。
配置内容组织技巧
避免重复、提升可维护性,建议这样写:
- 在
application.yml中只保留真正通用的配置,不要塞进任何环境相关字段 - 用占位符 + 默认值防错,比如
app.cache.timeout: ${CACHE_TIMEOUT:300} - 敏感信息(如数据库密码)不要硬编码,改用
${DB_PASSWORD},由运行时环境变量或配置中心注入 - 需要复用配置时,用
spring.profiles.include,例如 staging 环境继承 prod 配置但只改端口:spring:<br> profiles:<br> include: prod<br> server:<br> port: 8081
YAML 写法注意事项
YAML 对格式很敏感,容易因小错误导致配置不生效:
- 冒号
:后必须跟一个空格,port:8080是错的,要写成port: 8080 - 缩进必须用空格,不能用 Tab;层级之间统一用 2 或 4 个空格
- 中文注释或值要加引号,避免解析异常,比如
name: "用户服务" - 如果同时存在
.properties和.yml,前者优先级更高,不建议混用

















