2010-03-25 136 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} 
相关问题