一尘不染

spring启动应用程序的外部配置

tomcat

我有一个要使用外部配置文件运行的spring-boot应用程序。当我将其作为jar(带有嵌入式servlet容器)运行时,一切都很好。但是我想在外部servlet容器(Tomcat)下运行它,在这里我对外部配置有问题。我尝试了@PropertySource,但是在这种情况下,应用程序仅获得war文件配置中不存在的属性:外部配置不会覆盖内部配置。那么问题来了:如何配置将覆盖内部配置的外部配置?


阅读 488

收藏
2020-06-16

共1个答案

一尘不染

application.properties当您以jar
形式运行应用程序时,您可能正在当前目录中以形式使用外部配置。但是,在外部雄猫中以战争方式部署时,“当前目录”不是很有用。即使您知道当前目录是什么,在该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中运行多个应用程序,每个应用程序都使用其自己的外部属性文件。您甚至可以使 同一 应用程序的多个实例以不同的属性运行。

2020-06-16