2012-03-30 2 views
0

У меня есть PropertyPlaceholderConfigurer вроде этого:Может ли один Spring PropertyPlaceholderConfigurer настроить другой?

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:assuredlabor/margarita-${runningMode}.properties</value> 
     </list> 
    </property> 
</bean> 

Я хотел бы быть в состоянии определить свой режим бега в web.xml, как это:

<context-param> 
    <param-name>runningMode</param-name> 
    <param-value>production</param-value> 
</context-param> 

Так что я положил этот боб НАД «главный «имущество», описанное выше:

<bean id="servletPropertyPlaceholderConfigurer" class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> 
</bean> 

Но это не работает.

Возможно ли это с весной? Сейчас я использую версию 2.5.

Я нашел подобный вопрос:

PropertyPlaceholderConfigurer with Tomcat & ContextLoaderListener

Но нет никакого обсуждения в ServletContextPropertyPlaceholderConfigurer, так что я думаю, что это законный вопрос.

ответ

1

Вы не можете сделать это весной 2, без какого-либо пользовательского кода, я не думаю, так как один владелец места не может настроить другой.

Вам нужно использовать пружину 3, чтобы получить это из коробки. Для этого вам нужно создать компонент, который каким-то образом имеет значение, которое вы хотите, и использовать spring-el для ссылки на эту весну при настройке вашего заполнителя.Там особый боб для получения индивидуальных параметров контекста сервлета, как показано ниже:

<bean id="runningMode" class="org.springframework.web.context.support.ServletContextAttributeFactoryBean"> 
    <property name="attributeName" value="runningMode" /> 
</bean> 

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:assuredlabor/margarita-#{runningMode}.properties</value> 
     </list> 
    </property> 
</bean> 

И тогда вы можете просто обратиться к любому из свойств в синтаксисе нормального $ {}

1

От source code:

Подкласс PropertyPlaceholderConfigurer, устраняющее заполнителей в качестве параметров ServletContext инициализации (то есть записи web.xml контекстно-Param).

Может быть объединен с значениями «местоположения» и/или «свойств» в дополнение к контекстным параметрам web.xml. В качестве альтернативы можно определить без локальных свойств, чтобы разрешить все заполнители как context-params web.xml (или свойства системы JVM).

Если заполнитель не может быть разрешен в отношении предоставленных локальных свойств в приложении, этот конфигуратор вернется к параметрам ServletContext. Может также быть настроен так, чтобы параметры init ServletContext переопределяли локальные свойства (contextOverride = true).

Опционально поддерживает поиск атрибутов ServletContext: если включен, другой неразрешимый заполнитель будет соответствовать соответствующему атрибуту ServletContext, используя его строковое значение, если оно найдено. Это можно использовать для подачи динамических значений в разрешение Placeplace Spring.

Если не работает в WebApplicationContext (или в любом другом контексте, который может удовлетворить обратный вызов ServletContextAware), этот класс будет вести себя как по умолчанию PropertyPlaceholderConfigurer. Это позволяет сохранять определения ServletContextPropertyPlaceholderConfigurer в наборах тестов.

Как я понимаю, что означает, что вы можете использовать только один configurer:

<bean id="propertyPlaceholderConfigurer" class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:assuredlabor/margarita-${runningMode}.properties</value> 
     </list> 
    </property> 
</bean>