将多个 Spring 配置文件应用于单个配置 class
Applying multiple Spring profiles to a single Configuration class
我的应用程序有 4 个可能的 Spring 配置文件
- TEST(这用于 Unit/Integration 测试)
- 质量检查
- 阶段
- 制作
上面列表中的最后 3 个是该应用程序将在其中 运行。
的实际环境
这是我的配置概述 class 称为 AppConfig
@Configuration
@ComponentScan(basePackages={"org.mycompany.services","org.mycompany.domain", "org.mycompany.utils"})
public class AppContext {
}
这是我的问题:
我希望 AppContext 的配置仅适用于 QA、STAGE 和 PRODUCTION 配置文件(但不适用于 TEST 配置文件)。最好的方法是什么?
原因是上面的配置 class 扫描并从 org.mycompany.services 中选择 classes。但是我不希望这个包被提取用于测试配置文件,因为我打算使用 Mockito 模拟这个包中的 classes。
另一个可能的问题是,我是否需要重新考虑我接近 Unit/Integration 测试的方式,以便我可以简化 org.mycompany.service 包中 classes 的模拟?
您可以在配置 class 上使用 @Profile
注释。
要为 TEST
以外的任何配置文件启用 class,只需像 @Profile("!TEST")
一样使用它。
或者您可以像这样明确指定配置文件:@Profile({ "QA", "STAGE", "PRODUCTION" })
我的应用程序有 4 个可能的 Spring 配置文件
- TEST(这用于 Unit/Integration 测试)
- 质量检查
- 阶段
- 制作
上面列表中的最后 3 个是该应用程序将在其中 运行。
的实际环境这是我的配置概述 class 称为 AppConfig
@Configuration
@ComponentScan(basePackages={"org.mycompany.services","org.mycompany.domain", "org.mycompany.utils"})
public class AppContext {
}
这是我的问题: 我希望 AppContext 的配置仅适用于 QA、STAGE 和 PRODUCTION 配置文件(但不适用于 TEST 配置文件)。最好的方法是什么?
原因是上面的配置 class 扫描并从 org.mycompany.services 中选择 classes。但是我不希望这个包被提取用于测试配置文件,因为我打算使用 Mockito 模拟这个包中的 classes。
另一个可能的问题是,我是否需要重新考虑我接近 Unit/Integration 测试的方式,以便我可以简化 org.mycompany.service 包中 classes 的模拟?
您可以在配置 class 上使用 @Profile
注释。
要为 TEST
以外的任何配置文件启用 class,只需像 @Profile("!TEST")
一样使用它。
或者您可以像这样明确指定配置文件:@Profile({ "QA", "STAGE", "PRODUCTION" })