我想在重启期间通过外部配置文件覆盖我的Spring Boot应用程序中的一些配置。
我正在使用什么: java -jar -Dspring.profiles.active = $ {ENV} my-application.jar
这将在应用程序启动期间加载我的个人档案特定的应用程序属性。假设我有一个问题,我需要更改应用程序中的配置,我不想使用更改后的属性再次重建我的应用程序,我想要实现的是提供一个具有新值的外部属性文件配置,然后重新启动我的应用程序。
中提到的建议假设我将jar复制到服务器上的bin文件夹中,并在bin文件夹中创建一个/ config文件夹,其中包含override.properties文件,然后运行与上述相同的命令来重新启动我的应用程序。
它不会覆盖override.properties中提到的属性
我试图提供spring.config.location作为命令行参数,但随后我需要将所有属性写到该文件中,这不是我所需要的。
答案 0 :(得分:1)
如果您在引用的链接中查看第24节的顶部,则会看到Spring寻找物业提供商的一长串地方。你看不起那个名单吗?有许多选项可提供覆盖内部属性的外部属性。基本上,列表中较高的内容将覆盖列表中较低的内容。
一种选择是将JSON放入单个环境变量SPRING_APPLICATION_JSON
中。这是我们对意外覆盖的处理。我们总是在主启动脚本包含的单独文件中定义此变量,但通常为空。但是在任何时候,我们都可以为其添加属性,它们将具有优先级并覆盖任何现有的属性值。我们选择此选项是因为它具有很高的优先级。多数情况下,仅测试代码和设置会覆盖这些设置。唯一要做的是在命令行中放置属性。当然,可以在不构建新二进制文件的情况下更改这些文件。
该列表上还有其他有希望的选择,例如#14。我相信有一些方法可以使外部属性文件不会替换现有文件,而只是覆盖它们,这样您就不必在那里重新定义所有现有属性。如果没有办法做到这一点,我会感到很惊讶...拥有一个仅覆盖了一些属性的外部属性文件。
更新:问题注释中引用的“重复项”支持我在这里所说的内容。它非常清楚地表明,多个属性文件将相互覆盖。没有一个文件需要提供所有属性。因此,您似乎处于正确的轨道上,并且属性文件配置有问题。请记住我在说什么。使用除属性文件之外的其他来源可能更容易,例如单个环境变量SPRING_APPLICATION_JSON或单个环境变量。