2012-03-30 51 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上面的「主'我上面描述的財產大豆:

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

但這似乎並不奏效。

春天這可能嗎?我現在正在使用版本2.5。

我發現這個類似的問題:

PropertyPlaceholderConfigurer with Tomcat & ContextLoaderListener

但有沒有ServletContextPropertyPlaceholderConfigurer的討論,所以我認爲這是一個合理的問題。

回答

1

你不能做到這一點在春季2,如果沒有一些定製的編碼,我不認爲,因爲一個屬性佔位符不能配置另一個。

你需要使用spring 3來獲得這個開箱即用。爲了達到這個目的,你必須創建一個你想要的值的bean,並且在設置你的屬性佔位符時使用spring-el引用該spring。還有用於個人獲得servlet上下文參數,如下所示特殊的豆:

<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中的context-param條目)。

除了web.xml context-params之外,還可以結合「位置」和/或「屬性」值。或者,可以定義沒有本地屬性,將所有佔位符解析爲web.xml上下文參數(或JVM系統屬性)。

如果無法根據應用程序中提供的本地屬性解析佔位符,則此配置器將回退到ServletContext參數。也可以配置爲讓ServletContext init參數覆蓋本地屬性(contextOverride = true)。

可選地支持搜索ServletContext屬性:如果打開,否則無法解析的佔位符將與相應的ServletContext屬性匹配,如果找到,則使用其字符串化值。這可以用來將動態值提供給Spring的佔位符解析。

如果不是的WebApplicationContext(或其他任何情況下即能滿足ServletContextAware回調)內運行,這個類會像默認PropertyPlaceholderConfigurer。這允許在測試套件中保留ServletContextPropertyPlaceholderConfigurer定義。

據我瞭解,這意味着您可以使用只是一個單一的配置者:

<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> 
相關問題