2013-09-04 3 views
5

Я хотел бы установить профиль, используя application.properties файл с записью:Как установить профиль с помощью application.properties весной?

mode=master 

Как установить spring.profiles.active в моем файле context.xml? init-param работает только в контексте web.xml.

<init-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>"${mode}"</param-value> 
</init-param> 

ответ

8

Существует несколько способов изменения активных профилей, которые не берутся непосредственно из файла свойств.

  • Вы можете использовать <init-param>, как вы это делаете в своем вопросе.
  • Вы можете обеспечить системный параметр при запуске приложения -Dspring.profiles.active="master"
  • Вы можете получить ConfigurableEnvironment от вашего ApplicationContext и setActiveProfiles(String...) программно с context.getEnvironment().setActiveProfiles("container");

Вы можете использовать ApplicationListener слушать инициализации контекста. Объяснения о том, как это сделать here. Вы можете использовать ContextStartedEvent

ContextStartedEvent event = ...; // from method argument 
ConfigurableEnvironment env = (ConfigurableEnvironment) event.getApplicationContext().getEnvironment(); 
env.setActiveProfiles("master"); 

Вы можете получить значение "master" из файла свойств, как вы считаете нужным.

+0

Проблема в том, что используется в Spring MVC, который я не использую. Что эквивалентно в весеннем ядре? – luksmir

+2

@luksmir Нет эквивалента. Если вы контролируете создание контекста, просто используйте третий метод и setActiveProfiles(). –

+0

Спасибо за объяснение, что нет альтернативы setActiveProfiles() в моем случае. – luksmir

2

Вы можете использовать либо переменную окружения, системную переменную (опция -D для виртуальной машины Java или приложения) или положить его в JNDI (Java:. Comp/ENV/Вы можете, однако, не поставить его в файл свойств, как это необходимо до того, что специфические свойства файла для чтения.

Существует более подробную информацию в @Profile javadocs.

Другим решением является создать свой собственный ApplicationContextInitializer реализацию, которая считывает определенный файл и активирует заданный профиль .

Смежные вопросы