我希望能够针对任何环境设置活动配置文件主机依赖性,并且找不到一个环境无关的挂钩。
以下工厂将在应用程序上下文构建之前设置活动配置文件。
/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应用程序和带有VM参数的JUnit进行测试可以正常运行...
-Dspring.profiles.active=myHost
我使用打包为war的spring-boot-starter-web应用程序,并且需要在任何环境中设置和使用编程配置文件。
- Java应用程序
- JUnit
- Servlet容器
如何以编程方式为任何环境设置配置文件?
我不想使用VM参数或环境变量,因为配置文件应该由当前主机名设置。