Spring Boot中application.yml配置文件的加载顺序是怎样的?
Spring Boot 测试场景配置加载逻辑解答
猜想正确性结论
你的猜想整体符合Spring Boot的实际配置加载规则,仅其中的「工作链路/测试链路」属于自定义表述,Spring官方是通过配置源优先级和激活Profile两个核心逻辑来控制配置覆盖的。
测试场景下的完整配置加载顺序(优先级从低到高,高优先级同Key配置覆盖低优先级)
- 第一步:加载主代码资源(对应你说的「工作链路」)的通用配置,即
src/main/resources下的application.yml/application.properties - 第二步:加载测试代码资源(对应你说的「测试链路」)的通用配置,如果
src/test/resources下存在同名application.yml/application.properties,优先级高于主资源的通用配置,同Key会直接覆盖 - 第三步:加载激活Profile对应的专属配置:如果测试类标注了
@SpringBootTest+@ActiveProfiles("test"),会激活testProfile,此时所有路径下符合application-test.yml命名规则的配置都会被加载,Profile专属配置优先级高于同路径下的通用配置,同Key会覆盖前两步加载的所有通用配置
补充规则:如果主资源和测试资源路径下都存在
application-test.yml,测试资源下的Profile配置优先级更高,会覆盖主资源下的同Profile配置
常见注意事项
- 如果测试类没有添加
@ActiveProfiles注解,默认不会加载带Profile后缀的application-test.yml这类配置文件 - 配置覆盖是Key维度的,不是全文件替换:高优先级配置没有覆盖的Key,低优先级配置的对应值仍然会生效
- 测试场景下还有更高优先级的配置源:比如
@SpringBootTest(properties = {"xxx=xxx"})直接指定的配置、@TestPropertySource注解加载的配置,优先级高于所有application系列配置文件
内容的提问来源于stack exchange,提问作者skyho
相关产品推荐
相关产品推荐

