使用VM选项覆盖Spring属性

时间:2014-04-08 09:57:13

标签: java spring

我想实现以下行为:

我使用Spring ResourceBundleMessageSource的属性文件,其属性如下:

my.prop=42

现在我想用VM选项覆盖属性,如下所示:

-Dmy.prop=13

我怎样才能以简单透明的方式做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:2)

仅将您的MessageSource用于语言字符串。

使用属性的属性文件。

现在您可以使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer加载属性文件

在XML中,不使用SYSTEM_PROPERTIES_MODE_FALLBACK的默认值,而是将其设置为使用SYSTEM_PROPERTIES_MODE_OVERRIDE。

您现在可以使用@Value注释加载道具,VM选项将覆盖您在属性文件中设置的值

示例:

所以请调用MessageSource messages.properties

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages"/>
    <property name="fileEncodings" value="UTF-8"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

并调用属性文件misspiggy.properties(或其他:))

<bean id="propertyLoader" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="false"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="fileEncoding" value="UTF-8"/>
    <property name="locations">
        <list>
            <value>classpath:misspiggy.properties</value>
        </list>
    </property>
</bean>