You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Spring Boot项目如何不重命名排除依赖模块的profiles配置

Spring Boot 配置文件加载机制说明
  • Spring Boot 默认会自动扫描加载所有类路径下名为application.yml(或对应properties格式)的主配置文件,依赖的APP模块资源目录下的该文件也会被扫描读取
  • 主配置文件中spring.profiles.include属性的优先级高于普通配置,只要主配置被加载,该属性指定的profile会被强制追加到激活profile列表,不受外部指定的spring.profiles.active覆盖
  • 当你将APP模块的application.yml重命名为application.deploy.yml后,该文件不再是默认加载的主配置,只有当deploy profile被激活时才会读取,测试场景未激活该profile,因此该文件和内部的include配置都不会生效,最终只会加载你指定的main-test profile
无需重命名文件的解决方案

以下方案均可实现排除APP模块profile的需求:

方案1:测试类直接覆盖include属性为空

@SpringBootTest中配置的属性优先级高于类路径配置文件中的属性,直接将include置空即可:

@SpringBootTest(properties = {
    "spring.profiles.active=main-test",
    "spring.profiles.include="
})

即使APP模块的application.yml被加载,内部的include配置也会被该配置覆盖,不会追加prop1、prop2 profile。

方案2:指定测试场景仅加载测试配置文件

通过指定spring.config.name修改Spring Boot读取的默认配置文件名,不会读取APP模块的application.yml:

@SpringBootTest(properties = {
    "spring.profiles.active=main-test",
    "spring.config.name=application-main-test"
})

方案3:测试资源目录覆盖同名主配置

在TEST模块的src/test/resources目录下新建空的application.yml文件,测试类路径下的资源优先级高于依赖模块的资源,会直接覆盖APP模块的application.yml,原有include配置不会被读取。

方案4:使用@TestPropertySource注解配置

@SpringBootTest
@TestPropertySource(properties = {
    "spring.profiles.active=main-test",
    "spring.profiles.include="
})

该注解配置的属性优先级比@SpringBootTest更高,效果一致。


内容的提问来源于stack exchange,提问作者AntonChe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:45:03