Spring 引导中的外部化配置

Externalized Configuration in Spring boot

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

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

这不起作用。

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

我该如何解决我的问题?

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

  1. /当前目录下的config子目录
  2. 当前目录
  3. 类路径/配置包
  4. 类路径根目录

您可以将 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

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

docs 中了解更多信息。

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