Spring Boot 中的外部化配置

Posted

技术标签:

【中文标题】Spring Boot 中的外部化配置【英文标题】:Externalized Configuration in Spring boot 【发布时间】:2021-01-05 03:47:00 【问题描述】:

我有一个外部配置文件(外部 jar)。我尝试跑步并期待 外部文件中的值将覆盖内部文件中的值(\resource\ 中的application.properties - jar 文件中)。 我读了Documentation 并试试这个:

java -jar ccgame-1.0.jar --spring.config.location=classpath:/application.properties,file:/production.properties

这不起作用。

我的 jar 文件在 \target\ 目录和我的 production.properties 也是(\target\

我该如何解决我的问题?

我应该把外部配置文件放在哪里? 我该怎么办?

【问题讨论】:

【参考方案1】:

从 Spring Boot 2.0 开始,可以使用属性spring.config.additional-location。使用此属性,您可以设置外部配置文件,但该配置中的属性只会覆盖内部配置中的相应属性,而其他属性保持不变。

更多信息请关注docs。

如果您需要完全覆盖整个配置,请继续使用spring.config.location 属性。

【讨论】:

哦,我知道了,非常感谢。我尝试 spring.config.location 和 Dspring.config.location 这么多,直到我使用你的附加本地化才能解决我的问题。它打破了我的大脑 2 小时。非常感谢【参考方案2】:

按照惯例,Spring Boot 按以下优先顺序在 4 个预定位置查找外部化配置文件 - application.properties 或 application.yml:

    /config 当前目录的子目录 当前目录 类路径 /config 包 类路径根

您可以将 application.properties 放置在 4 个位置中的任何一个,而无需在执行 jar 时提供 application.properties 的位置。如果您想提供任何其他自定义位置,则必须在执行 jar 时提供配置位置的路径:

java -jar -Dspring.config.location=<path-to-file> myProject.jar

来源:https://www.baeldung.com/spring-properties-file-outside-jar

【讨论】:

它对我不起作用。在我的外部文件配置中。我只是将端口更改为 8081。服务器仍然在 8080 上运行,并向我抛出有关数据源的错误。如果我添加数据源,那么它可以工作。我认为它只是使用外部文件而不是覆盖内部文件 如果您提供执行 jar 的外部位置,则内部应用程序属性将被忽略。 我该如何解决这个问题。我希望它会被覆盖。不忽略 我认为可能有一个解决方案。只是我不知道 您也可以将该文件放在外部位置并维护您的属性,例如:application.properties application-prod.properties。现在在执行 jar 时: -Dspring.profiles.active=prod -Dspring.config.location=C:\Config ;也传递配置文件。现在在这种情况下,它将首先读取 application.properties 并从 application-prod.properties 覆盖

以上是关于Spring Boot 中的外部化配置的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 外部配置 - profile 特定配置

如何在 Cloud Foundry 使用 Spring Boot 外部化配置

Spring/Spring Boot的外部化配置

spring boot框架学习之重要注解3注解方式读取外部资源配置文件

无法从 Spring Boot 中的外部属性文件中读取值

Spring Boot 外部化配置简介