有没有办法在Spring XML中指定一个默认的属性值?

我们使用一个PropertyPlaceholderConfigurer在我们的Springconfiguration中使用java属性( 详细信息在这里 )

例如:

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

我们想添加一个额外的属性,但是有一个分布式系统,现有的实例可以使用默认值。 有没有办法避免更新所有的属性文件,通过在Springconfiguration中指定一个默认值,当没有定义重写属性值?

你在寻找这里logging的PropertyOverrideConfigurer吗?

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

PropertyOverrideConfigurer(另一个bean工厂后处理器)类似于PropertyPlaceholderConfigurer,但与后者相反,原始定义对于Bean属性可以具有默认值或根本没有值。 如果重写的属性文件没有某个bean属性的条目,则使用默认的上下文定义。

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

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

应该为你工作8088作为默认端口

另见: http : //blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/

有一个鲜为人知的function,这使得这更好。 您可以使用可configuration的默认值而不是硬编码的值,这里是一个例子:

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} 

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> 

使用?:即猫王操作员 :

 <property name="port"> <value>${my.server.port?:8080}</value> </property> <!-- OR --> <property name="port" value="${my.server.port?:8080}" /> 

这是三元运算符的缩写,自Spring 3.0起可用 ,并且与Groovy中的相同运算符有连接。