Я хочу установить зависимость хоста активного профиля от любой среды и не могу найти независимую от среды ловушку.
Следующая фабрика установит активный профиль до построения контекста приложения.
/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 и JUnit с аргументами VM работает ...
-Dspring.profiles.active=myHost
Я использую пакетное приложение spring-boot-starter-web, и программный профиль должен быть установлен и использован в любой среде.
- Java-приложение
- JUnit
- Контейнер сервлета
Как мне настроить профиль программно для любой среды?
Я не хочу использовать аргументы виртуальной машины или переменные environemt, потому что профиль должен быть установлен по текущему имени хоста.