【问题标题】:Externalized Configuration in Spring bootSpring 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\

我该如何解决我的问题?

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

【问题讨论】:

    标签: java spring spring-boot spring-boot-configuration


    【解决方案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:

    1. /config 当前目录的子目录
    2. 当前目录
    3. 类路径 /config 包
    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

    【讨论】:

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