我想为任何环境设置依赖于活动的配置文件主机,并且找不到与环境无关的挂钩。
以下工厂将在构建应用程序上下文之前设置活动配置文件。
/META-INF/spring.factories
org.springframework.context.ApplicationContextInitializer=MyApplicationContextInitializer
MyApplicationContextInitializer.java
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext ca) {
ConfigurableEnvironment environment = ca.getEnvironment();
environment.addActiveProfile("myHost");
}
}
如果这个例子是由JUnit在模拟环境中执行的......
* Test.java
...
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
...
...将记录以下内容。
...
... RestControllerTests : The following profiles are active: myHost
...
但个人资料 myHost 未激活,默认个人资料将用于JUnit的上下文!
作为Java Application的测试和带有VM参数的JUnit工作......
-Dspring.profiles.active=myHost
我使用war-packaged spring-boot-starter-web应用程序,并且应在任何环境中设置和使用编程配置文件
如何为任何环境设置配置文件以编程方式?
我不想使用VM参数或environemt变量,因为配置文件应由当前主机名设置。
答案 0 :(得分:0)
我有同样的问题,我终于解决了它实现ActiveProfilesResolver接口。
在你的情况下,你可以这样做:
public class MyActivateProfilesResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> testClass) {
// some code to find out your active profiles
return new String[] {"myHost"};
}
}
然后你需要将你的测试与你的解析器链接起来:
@ActiveProfiles(resolver = MyActivateProfilesResolver.class)
答案 1 :(得分:0)
经过大量Google搜索后最简单的答案:)
@SpringBootApplication
public class ExampleMain2 {
public static void main(String[] args) {
ConfigurableEnvironment environment = new StandardEnvironment();
environment.setActiveProfiles("dev");
SpringApplication sa = new SpringApplication(ExampleMain2.class);
sa.setEnvironment(environment);
sa.setAdditionalProfiles("remote","live");
sa.run(args);`enter code here`
}
}