Ответ от Thomasz действителен до тех пор, пока имя профиля может быть предоставлено статически в файле web.xml, или если используется новый тип конфигурации без XML, где можно программно загрузить профиль для установки из файла свойств.
Поскольку мы все еще используем версию XML, я исследовал ее дальше и нашел следующее хорошее решение, в котором вы реализуете свой собственный ApplicationContextInitializer
, где вы просто добавляете новый PropertySource с файлом свойств в список источников для поиска конфигурации конкретной среды.настройки.в приведенном ниже примере можно установить свойство spring.profiles.active
в файле env.properties
.
public class P13nApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private static Logger LOG = LoggerFactory.getLogger(P13nApplicationContextInitializer.class);
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
try {
environment.getPropertySources().addFirst(new ResourcePropertySource("classpath:env.properties"));
LOG.info("env.properties loaded");
} catch (IOException e) {
// it's ok if the file is not there. we will just log that info.
LOG.info("didn't find env.properties in classpath so not loading it in the AppContextInitialized");
}
}
}
Затем вам нужно добавить этот инициализатор в качестве параметра к ContextLoaderListener
пружины следующим образом для вашего web.xml
:
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>somepackage.P13nApplicationContextInitializer</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Вы также можете применить его к DispatcherServlet
:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextInitializerClasses</param-name>
<param-value>somepackage.P13nApplicationContextInitializer</param-value>
</init-param>
</servlet>