spring boot多环境配置核心是通过application-{profile}.yml命名规范与spring.profiles.active激活机制实现动态加载,遵循覆盖式继承规则,支持命令行、jvm参数、环境变量等多种激活方式,并严禁在yaml中硬编码敏感信息。

Java 中用 YAML 配置文件配合 Spring Profiles 实现多环境参数动态切换,核心是让配置按环境自动加载、不冲突、不硬编码。关键不在写多少文件,而在于 Spring Boot 能准确识别当前环境并只加载对应配置。
按规范命名配置文件
主配置统一放在 application.yml,只放公共项(如 server.port、logging.level)和默认激活的 profile:
-
application.yml:设
spring.profiles.default: dev,避免启动失败 - application-dev.yml:仅写开发环境特有配置,比如本地数据库地址、debug 日志级别
- application-test.yml:测试环境专属参数,如测试库连接池大小、mock 开关
- application-prod.yml:生产环境敏感项留空或占位,实际由外部注入
通过多种方式激活 Profile
运行时指定激活哪个环境,优先级从高到低依次生效:
- 命令行启动加参数:
java -jar app.jar --spring.profiles.active=prod - JVM 系统属性:
-Dspring.profiles.active=test - 操作系统环境变量:
SPRING_PROFILES_ACTIVE=dev - Docker 容器中设置环境变量,K8s 里用 envFrom 或 configMap 注入
控制配置加载逻辑与覆盖规则
YAML 文件之间不是简单合并,而是“覆盖式继承”:
- 如果 application-prod.yml 没写
server.port,就沿用 application.yml 的值 - 写了就完全替换,不会叠加或拼接
- 注意缩进:YAML 对空格敏感,
spring:下必须缩进,profiles:和active:顶格会解析失败 - 敏感字段(如密码、密钥)不要写在任何 YAML 文件里,改用环境变量或配置中心
结合构建工具做编译期环境绑定
适合 CI/CD 流水线固定打包场景,避免部署时漏传参数:
- Maven 中定义
<profile></profile>,如<id>prod</id>,配好env=prod - 在 application.yml 里用
${env}占位符,配合maven-resources-plugin过滤替换 - 执行
mvn clean package -Pprod,生成的 jar 已内置 prod 配置,启动时无需额外指定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











