39 | Spring Boot 配置文件加载顺序优先级搞反就完了摘要application.ymlapplication-dev.yml 命令行参数。搞反了覆盖关系上线后配置不生效排查半天。一、优先级顺序从高到低1. 命令行参数最高 java -jar app.jar --spring.profiles.activeprod 2. Java System PropertiesSystem.getProperties() java -Dspring.profiles.activeprod -jar app.jar 3. 操作系统环境变量 export SPRING_PROFILES_ACTIVEprod 4. 配置文件当前目录/config/ ./config/application-prod.yml 5. 配置文件当前目录 ./application-prod.yml 6. 配置文件classpath:/config/ classpath:/config/application-prod.yml 7. 配置文件classpath:/ classpath:/application-prod.yml最低记忆口诀外 内命令行 文件profile 具体 通用二、踩坑现场场景 1以为是 application.yml 覆盖 dev实际上是 dev 覆盖 yml# application.ymlspring.profiles.active:devdb.url:jdbc:mysql://localhost:3306/test# application-dev.ymldb.url:jdbc:mysql://dev-db:3306/test实际生效db.url jdbc:mysql://dev-db:3306/testdev 覆盖 yml场景 2命令行参数不生效搞反了顺序# ❌ 错误命令行参数在 -jar 前面java-spring.profiles.activeprod-jarapp.jar# ✅ 正确命令行参数在 -jar 后面java-jarapp.jar--spring.profiles.activeprod三、正确写法3.1 推荐的项目结构项目根目录/ ├── config/ │ └── application-prod.yml # ✅ 生产配置放外面方便修改 ├── application.yml # 通用配置 └── app.jar3.2 多环境配置# application.yml通用spring:profiles:active:profileActive# Maven 过滤server:port:8080# application-dev.ymlserver:port:8081# application-prod.ymlserver:port:8080四、最佳实践✅ 5 条铁律通用配置放application.yml环境差异放application-{profile}.yml生产配置放 jar 外面的config/目录方便修改命令行参数优先级最高紧急开关用这个spring.profiles.active在启动时指定不要写死在配置文件里用Value必须写默认值防止配置项不存在五、小结优先级命令行 外部配置文件 classpath 配置文件profile 具体配置 通用配置dev覆盖yml生产配置放 jar 外面的config/目录不需要重新打包紧急开关用命令行参数--switchtrue第五辑完。—— 下一篇进入第六辑数据库与 MyBatis 篇首篇PreparedStatement的setObject空值处理。更多资料一线大厂Java面试题合集