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