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}
语法.
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
PropertyOverrideConfigurer是另一个bean工厂后处理器,类似于PropertyPlaceholderConfigurer,但与后者相反,原始定义可以具有默认值,或者根本没有值用于bean属性.如果重写的Properties文件没有某个bean属性的条目,则使用默认的上下文定义.
使用:
,即猫王运营商:
<property name="port" value="${my.server.port:8080}" />
Run Code Online (Sandbox Code Playgroud)
它是三元运算符的简写,自Spring 3.0起可用,并且与Groovy中的同一运算符连接.
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)