如何在spring webapp中从命令行覆盖属性

时间:2013-01-25 16:45:30

标签: spring properties

我有这个属性设置

<bean id="preferencePlaceHolder"
      class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <property name="locations" ref="propertiesLocations" />
</bean>
<beans profile="dev, testing">
    <util:list id="propertiesLocations">
        <value>classpath:runtime.properties</value>
        <value>classpath:dev.properties</value>
    </util:list>
</beans>
...

在runtime.properties中有一个属性,如此

doImportOnStartup=false

我想偶尔这样做

mvn jetty:run -DdoImportOnStartup=true

并使系统属性优先。我怎样才能做到这一点?感谢。

1 个答案:

答案 0 :(得分:3)

这可能不是你想要的,但这里是我的属性加载xml无论如何。这些位置按顺序加载,因此最后找到的将覆盖前一个,因此类路径(即war)首先跟随文件系统上的env特定文件。我更喜欢这种方法作为一次性配置指向外部文件,但您只需在需要时更改该外部文件,不再需要配置Spring或JVM args。最终位置正在寻找-Dconfig JVM arg,您可以为覆盖prop文件提供完整路径。

希望这有帮助。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="searchContextAttributes" value="true" />
    <property name="contextOverride" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:*.properties</value>
            <value>file:${HOME}/some-env-specific-override.properties</value>
            <value>${config}</value>
        </list>
    </property>
</bean>