我的其他客户端会将系统属性service.mode
设置为prod或uat或dev。基于此属性,应加载文件dev.properties,prod.properties,uat.properties
之一的相应属性。该属性将由定义为spring的applicationContext.xml的不同服务bean使用。
根据系统属性service.mode
加载相应属性的最佳方法是什么?
答案 0 :(得分:0)
最好的方法是在spring配置文件中使用PropertyPlaceholderConfigurer。喜欢这个
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>file:${service.mode}</value>
</property>
</bean>
然后你可以在你的bean中访问这样的属性
<bean id="initSystemStatus" class="xxxx.xxxx.xxxx.InitSystemStatus">
<constructor-arg index="0" value="${application.context.instanceID:0001}" />
<constructor-arg index="1" value="${application.context.timeout:2000}"/>
</bean>
<强> N.B。强>
在${application.context.instanceID:0001}
中,0001
是默认值,如果属性文件中未提供属性application.context.instanceID
。
答案 1 :(得分:0)
使用PropertyPlaceholderConfigurer
如下
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>${service.mode}.properties</value>
</property>
</bean>
现在,当您启动其余客户端时,请务必通过service.mode
来自提示(例如-Dservice.mode=uat
)
修改强>:
如果未提供service.mode
,请使用以下配置
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>${service.mode:prod}.properties</value>
</property>
</bean>
请注意提及属性的方式${service.mode:prod}
。这意味着,如果无法解析service.mode
,则会选择默认值,即prod
。
注意:仅适用于SPRING 3.X