我有一个 spring-boot 应用程序,我想使用外部配置文件运行它。
当我将它作为 jar 运行(带有嵌入式 servlet 容器)时,一切都很好。
但我想在外部 servlet 容器(Tomcat)下运行它,这里我遇到了外部配置问题。我尝试过 @PropertySource,但在这种情况下,应用程序仅获取 war 文件配置中缺少的属性:外部配置不会覆盖内部配置。
所以问题是:如何配置外部配置来覆盖内部配置?
您可能正在使用以下形式的外部配置application.properties
当您将应用程序作为 jar 运行时,位于当前目录中。然而,当在外部 tomcat 中部署为 war 时,“当前目录”并不是很有用。即使您找出当前目录是什么,它很可能是该 tomcat 中运行的所有应用程序的同一位置,因此当您运行多个应用程序时,这不会很好地工作。
我们在这里所做的是声明两个PropertySources
在我们的应用程序中:
@PropertySources({@PropertySource(value={"classpath:internal.properties"}), @PropertySource(value={"file:${application.properties}"})})
internal.properties
包含属性的“内置”默认值。第二PropertySource
是一个包含外部配置的文件。请注意文件名本身就是一个属性。
我们在外部定义它Context
我们的应用程序的元素(在 tomcat 中):
<Context docBase="/path/to/your/war/your.war">
<Parameter name="application.properties" value="/path/to/your/properties/application.properties"/>
</Context>
这允许您在 tomcat 中运行多个应用程序,每个应用程序使用它自己的外部属性文件。您甚至可以有多个实例same以不同属性运行的应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)