根据系统属性模式(Dev / Prod / UAT)加载适当的属性文件

时间:2013-10-08 10:18:12

标签: java spring

我的其他客户端会将系统属性service.mode设置为prod或uat或dev。基于此属性,应加载文件dev.properties,prod.properties,uat.properties之一的相应属性。该属性将由定义为spring的applicationContext.xml的不同服务bean使用。

根据系统属性service.mode加载相应属性的最佳方法是什么?

2 个答案:

答案 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