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

Rog*_*Rog 90 java xml spring properties

我们使用PropertyPlaceholderConfigurer在Spring配置中使用java属性(详情请参见此处)

例如:

<foo name="port">
  <value>${my.server.port}</value>
</foo>
Run Code Online (Sandbox Code Playgroud)

我们想添加一个额外的属性,但是有一个分布式系统,其中现有实例都可以使用默认值.有没有办法避免更新我们的所有属性文件,通过在没有定义覆盖属性值的情况下指示Spring配置中的默认值?

lex*_*ore 269

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

  • @OndrejBozek - (抱歉发布一篇旧帖子)我遇到了同样的问题,请参阅Spring Framework问题[https://jira.spring.io/browse/SPR-9989].如果涉及多个占位符配置器,则使用":"表示法指定的默认值仅由链中的第一个占位符配置器解析.因此,如果第一个配置器没有该属性,则该属性将始终设置为默认值,即使链中的配置器确实具有该属性.见[http://stackoverflow.com/a/22452984/599609] (11认同)
  • 对我来说,无论属性是否定义,它总是用默认值覆盖属性. (10认同)
  • 仅供参考:[SPR-4785](https://jira.springsource.org/browse/SPR-4785) (8认同)
  • 似乎 `${my.server.port:-defaultValue}` 也给出了相同的结果,请注意“`:-`”而不是“`:`”。 (2认同)
  • 您需要添加 `&lt;context:property-placeholder/&gt;` 才能工作,或者添加一个 `PropertyPlaceholderConfigurer` (2认同)

Mic*_*ing 28

有一个鲜为人知的功能,这使得它更好.您可以使用可配置的默认值而不是硬编码的默认值,这是一个示例:

config.properties:

timeout.default=30
timeout.myBean=60
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

要在以后仍能轻松覆盖的情况下使用默认值,请在config.properties中执行此操作:

timeout.myBean = ${timeout.default}
Run Code Online (Sandbox Code Playgroud)


Ube*_*rto 24

<foo name="port">
   <value>${my.server.port:8088}</value>
</foo>
Run Code Online (Sandbox Code Playgroud)

你应该有8088作为默认端口

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


Jos*_*seK 14

您是否正在寻找此处记录的PropertyOverrideConfigurer

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

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


rye*_*nus 9

使用:,即猫王运营商:

<property name="port" value="${my.server.port:8080}" />
Run Code Online (Sandbox Code Playgroud)

它是三元运算符的简写,自Spring 3.0可用,并且与Groovy中的同一运算符连接.


RTS*_*lio 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> 
Run Code Online (Sandbox Code Playgroud)