Spring Boot只加载src/main/resources/下符合application-{profile}.yml命名规范、UTF-8无BOM的配置文件;spring.profiles.active须在application.yml或启动参数中设置;多profile按声明顺序覆盖;IDEA需在运行配置中显式指定profile。

application-dev.yml 文件名和位置写错,Spring Boot 根本不加载
Spring Boot 只认 application-{profile}.yml(或 .properties)这种命名格式,且必须放在 src/main/resources/ 下。常见错误是写成 application-dev.yaml(后缀不对)、dev.yml(缺前缀)、config/application-dev.yml(没配 spring.config.location 时不会自动扫)。另外,文件编码要是 UTF-8,BOM 头会导致解析失败,报 YAML parser error。
实操建议:
- 确保文件名为
application-dev.yml,不是dev.yml或application-dev.yaml - 放在
src/main/resources/目录下,不要嵌套进子文件夹(除非显式配置) - 用编辑器检查是否含 BOM:VS Code 右下角看编码,Sublime 可用 “File → Reopen with Encoding → UTF-8”
- 加个简单属性测试是否生效:
app.env: dev,启动后用@Value("${app.env}")打印验证
profiles.active 设置无效,始终走 application.yml
spring.profiles.active 必须在「被加载的配置」里设置才起作用。如果只写在 application-dev.yml 里,而当前没激活 dev,那它根本不会被读取——形成死循环。真正生效的位置只有两个:已加载的 application.yml(主配置),或 JVM 参数 / 命令行参数。
实操建议:
- 在
application.yml里明确写:spring.profiles.active: dev - 命令行启动时指定:
--spring.profiles.active=dev,如:java -jar app.jar --spring.profiles.active=dev - 避免在
application-dev.yml中再写spring.profiles.active,它不参与“谁先加载”的决策 - 启动日志里搜
Active profiles,确认实际激活的 profile 是不是你想要的
多个 profile 同时激活但配置冲突,属性没按预期覆盖
Spring Boot 的配置加载顺序决定了覆盖逻辑:命令行 > 系统属性 > application.yml > application-{profile}.yml。但多个 profile 激活(如 dev,mysql)时,application-dev.yml 和 application-mysql.yml 是并列加载的,**后声明的 profile 优先级更高**(即 spring.profiles.active: dev,mysql 中,mysql 覆盖 dev 的同名属性)。
实操建议:
- 把通用配置放
application.yml,环境差异放对应application-{profile}.yml - 需要叠加多个环境时,注意声明顺序:
dev,mysql和mysql,dev行为不同 - 用
@ConfigurationProperties绑定时,确保类上加了@Profile("dev")或类似限定,否则可能绑定到未激活 profile 的配置 - 查最终生效值?启动加
--debug,看日志里PropertySources加载顺序
IDEA 运行时 profile 不生效,但 jar 包启动正常
IntelliJ 默认不读取 application.yml 里的 spring.profiles.active,而是用自己的 Run Configuration。即使你改了配置文件,IDEA 仍可能沿用上次缓存的 VM options 或 Environment variables。
实操建议:
- 打开 Run → Edit Configurations → 找到你的 Spring Boot 启动项 → 在
Environment variables里加:SPRING_PROFILES_ACTIVE=dev - 或者在
VM options里加:-Dspring.profiles.active=dev - 删掉旧的 Run Configuration,新建一个,避免继承历史脏配置
- 检查 IDEA 右上角运行按钮旁的 profile 下拉菜单(如果有),确认是否手动选了别的 profile
Active profiles 和 Located property source 两行,比猜强得多。









