Java 通过外部属性文件覆盖spring引导应用程序配置

Java 通过外部属性文件覆盖spring引导应用程序配置,java,spring-boot,Java,Spring Boot,我希望在通过外部配置文件重新启动时覆盖spring引导应用程序中的一些配置 我使用的是: java-jar-Dspring.profiles.active=${ENV}my-application.jar 这将在应用程序启动期间加载我的配置文件特定的应用程序属性。假设我有问题,需要更改应用程序中的配置,我不想用更改的属性再次重建应用程序,我想实现的是提供一个外部属性文件,该文件具有配置的新值,然后重新启动应用程序 我试过这里提到的建议 假设我将jar复制到服务器上的bin文件夹,并在包含over

我希望在通过外部配置文件重新启动时覆盖spring引导应用程序中的一些配置

我使用的是: java-jar-Dspring.profiles.active=${ENV}my-application.jar

这将在应用程序启动期间加载我的配置文件特定的应用程序属性。假设我有问题,需要更改应用程序中的配置,我不想用更改的属性再次重建应用程序,我想实现的是提供一个外部属性文件,该文件具有配置的新值,然后重新启动应用程序

我试过这里提到的建议

假设我将jar复制到服务器上的bin文件夹,并在包含override.properties文件的bin文件夹中创建一个/config文件夹,然后运行与上述相同的命令来重新启动应用程序

它不会覆盖override.properties中提到的属性


我试图提供spring.config.location作为命令行参数,但我需要在该文件中写入我的所有属性,这不是我所需要的。

如果您查看您引用的链接中第24节的顶部,您将看到一个很长的spring查找属性提供程序的位置列表。你看过那张单子了吗?有许多选项可用于提供覆盖内部属性的外部属性。基本上,列表中较高的内容将覆盖列表中较低的内容

一个选项是将JSON放入单个环境变量
SPRING\u APPLICATION\u JSON
。这就是我们为意外覆盖所做的。我们总是在主启动脚本包含的单独文件中定义此变量,但它通常为空。但在任何时候,我们都可以向其中添加属性,它们将优先并覆盖任何现有属性值。我们选择这个选项是因为它的优先级非常高。通常只有测试代码和设置覆盖这些设置。唯一可以做的另一件事是将属性放在命令行上。当然,可以在不构建新二进制文件的情况下对其进行更改

在这张名单上还有其他有希望的选择,比如#14。我相信有一些方法可以让外部属性文件不替换现有的属性文件,而只是覆盖它们,这样您就不必在那里重新定义所有现有属性。如果没有办法做到这一点,我会感到惊讶…有一个外部属性文件,它只是覆盖了一些属性


更新:问题评论中引用的“副本”支持了我在这里所说的。它非常清楚地表明,多个属性文件将相互覆盖。没有一个文件需要提供所有属性。看来您走对了方向,只是您的属性文件配置有问题。记住我说的话。使用属性文件以外的其他源可能更容易,例如单个环境变量SPRING\u APPLICATION\u JSON或单个环境变量。

谢谢您的评论,重复问题链接给了我答案。我必须将名称作为application.properties保存在/config文件夹中。我给它起了别的名字,所以它不起作用。