2010-03-25 137 views
80

我們使用的是PropertyPlaceholderConfigurer在我們的Spring配置文件來使用Java屬性(details here有沒有辦法在Spring XML中指定默認屬性值?

如:

<foo name="port"> 
    <value>${my.server.port}</value> 
</foo> 

我們想添加一個附加屬性,但有一個分佈式系統,其中現有實例都可以使用默認值。有沒有辦法避免更新我們所有的屬性文件,在沒有定義重寫屬性值時,通過在Spring配置中指定默認值?

回答

13

您正在尋找的PropertyOverrideConfigurer這裏記錄

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-overrideconfigurer

的PropertyOverrideConfigurer, 另一個bean工廠後處理器, 類似於 PropertyPlaceholderConfigurer。但是 與後者相比,對於bean屬性,原始的 定義可以具有默認值或 沒有值。 如果重寫的屬性文件 沒有某個特定bean 屬性的條目,則使用默認上下文 定義。

+0

有人可以向我解釋'18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA'是什麼?我相信其他人都知道,我只是愚蠢的,但以防萬一...... – 2017-09-08 22:04:59

237

Spring 3支持${my.server.port:defaultValue}語法。

+8

僅供參考:[SPR-4785](https://jira.springsource.org/browse/SPR-4785) – cubanacan 2013-01-11 09:37:27

+8

對我而言,無論屬性是否定義,它都會覆蓋默認值的屬性。 – 2013-11-01 13:55:17

+0

它適合我! – 2014-05-28 15:04:34

8

http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html指出,在bean本身將被視爲違約定義的「本地屬性」,從文件中讀取值所覆蓋:

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"><value>my_config.properties</value></property> 
    <property name="properties"> 
    <props> 
     <prop key="entry.1">123</prop> 
    </props> 
    </property> 
</bean> 
+0

thx,有關於javadoc春天的話,但我無法想象如何做到這一點! – Guillaume 2011-03-18 15:59:15

20

有一個鮮爲人知的功能,這使得THI更好。您可以使用配置的默認值,而不是硬編碼之一,這裏有一個例子:

config.properties:

timeout.default=30 
timeout.myBean=60 

的context.xml:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>config.properties</value> 
    </property> 
</bean> 

<bean id="myBean" class="Test"> 
    <property name="timeout" value="${timeout.myBean:${timeout.default}}" /> 
</bean> 

要使用默認同時仍然可以輕鬆覆蓋以後,請在config.properties中執行此操作:

timeout.myBean = ${timeout.default} 
相關問題