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

发布于 2021-02-01 16:12:41

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

关注者
0
被浏览
79
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    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中运行多个应用程序,每个应用程序都使用其自己的外部属性文件。您甚至可以使 同一 应用程序的多个实例以不同的属性运行。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看