在运行时覆盖Spring WebApp中的属性文件

我使用PropertyPlaceholderConfigurer在我的Spring WebApplication加载属性文件,如下所示:

    classpath:db.properties classpath:mail.properties    

现在,我想覆盖mail.properties一些属性,所以我在阅读这篇文章的 application-context文件中创建了一个额外的条目,如下所示:

  

然后,在我的Tomcat Server ,在启动配置的VM Arguments中,我提供了额外的条目:

-Dexternal.props="/Users/ArpitAggarwal/Desktop/override.properties"

我必须覆盖某些键的重写值。

但是,WebApp 没有override.properties获取值。 任何人都可以帮助我弄清楚我错过了什么。

任何帮助将不胜感激。 谢谢!

我为解决问题所做的是将location属性替换为${ext.properties.dir:classpath:}/override.properties ,如下所示:

  

并从application-server/jvm提供了ext.properties.dir值:

 -Dext.properties.dir=file:/Users/ArpitAggarwal/properties/ 

参考 : 6-tips-for-managing-property-files-with-spring 。

我认为使用多个propertyPlaceholders不是一个goog的想法。 当两个xml配置在同一个上下文中加载每个属性并尝试交叉使用它时,我遇到了很多问题。

如果要外部化属性文件,我建议使用JNDI属性:

    classpath:db.properties classpath:mail.properties ${java:com/env/myApp/externalProperties}    

这个JNDI的值是:“file:/ path-to-propertiesFile”。

这样你只需要一个propertyePlaceholder。 另请注意,通过将外部文件作为最后一个位置,如果您有重复的键,spring将仅保留最后一个。

您只需在您的应用程序上下文中使用

  

问题是你只是错误地使用了位置,实际位置是vm arg variable key => $ {external.props}