2015-10-31 3 views
1

Рассмотрим приложение на основе веб с пружиной 4. пружинные профили фасоли определяется в web.xml, как:Получить Весна имя профиля с пружиной EL

<context-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>prod,edb,cas</param-value> 
</context-param> 

Теперь рассмотрим компонент определяется в весенне-applicaiton контекста .xml в

<util:properties id="myPolicy"  
    location= 
     "classpath:/configs/${ACCESS-ACTIVE-PROFILE-SECOND-ITEM}/my-policy.properties" /> 

возможно ли, что я могу получить доступ к списку активных профилей и выберите второй (в моем примере EDB). Таким образом, я могу динамически загружать ресурсы при изменении активного профиля.


Это может помочь! Я мог бы получить активный профиль, когда веб-приложение начинается с кодом ниже:

public void contextInitialized(ServletContextEvent event){ 
     ApplicationContext applicationContext = WebApplicationContextUtils 
       .getWebApplicationContext(event.getServletContext()); 
     String activeProfiles[] = applicationContext.getEnvironment().getActiveProfiles(); 
     system.out.print(activeProfiles[1]) 
    } 

ответ

2

Синтаксис будет "#{environment.activeProfiles[1]}" - однако, это слишком рано, в контексте жизненного цикла; ActiveProfiles не настроен до того, как в этом случае оценивается SpEL.

Что случилось с

<beans profile="foo"> 
    <util:properties id="myPolicy" 
      location="classpath:/configs/foo/my-policy.properties" /> 
</beans> 

<beans profile="bar"> 
    <util:properties id="myPolicy" 
      location="classpath:/configs/bar/my-policy.properties" /> 
</beans> 

?

На самом деле, я только что узнал, что

"#{environment.getActiveProfiles()[1]}" 

работа - явный вызов сорбента вызывает свойство быть загружено.

+0

Отличный !! Ну, я подумал, что я могу использовать только placeholder в XML. Как упоминалось в http://www.javacodegeeks.com/2013/01/spring-property-placeholder-configurer-a-few-not-so-obvious-options.html в Но вы показали, что я могу легко назвать springEL в мой xml-файл. Можете ли вы показать мне ссылку?! –

+0

'$ {...}' в весенней конфигурации XML - это заполнители свойств, '# {...}' - выражения SpEL. См. [Справочное руководство по весне] (http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/expressions.html#expressions-beandef). Эти выражения оцениваются один раз, при времени инициализации контекста. Другие проекты, такие как [Spring Integration] (http://projects.spring.io/spring-integration/), используют выражения SpEL во время выполнения, где выражение оценивается против текущего сообщения. Важно понимать различия. –

+0

Да, это упоминалось там: ** Выражения SpEL могут использоваться с метаданными конфигурации _XML_ или аннотацией для определения BeanDefinitions. В обоих случаях синтаксис для определения выражения имеет вид # {<строка выражения>} ** –