当前位置: 首页 > 知识库问答 >
问题:

通过外部属性文件覆盖spring-boot应用程序配置[重复]

易飞文
2023-03-14

我想在重新启动时通过外部配置文件覆盖Spring Boot应用程序中的几个配置。

我正在使用的内容:java-jar-dspring.profiles.active=${ENV}my-application.jar

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

我试过这里提到的建议https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

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

它不会重写override.properties中提到的属性

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

共有1个答案

危阳
2023-03-14

如果您查看您引用的链接中第24节的顶部,您将看到一长串Spring寻找属性提供商的地方。你看过那张单子了吗?有许多选项可以提供覆盖内部属性的外部属性。基本上,列表中较高的内容将覆盖列表中较低的内容。

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

还有其他有前途的选择,比如14号。我相信有一些方法可以使外部属性文件不替换现有的属性文件,而是重写它们,这样您就不必在那里重新定义所有现有的属性。如果没有办法做到这一点,我会很惊讶...有一个外部属性文件,只是覆盖几个属性。

 类似资料:
  • 在spring boot中,我有以下配置文件:application-email.yaml

  • 我正在开发一个spring boot应用程序 我想用外部文件(例如)重写中的某些属性。 我尝试了几种方法: 中的“我的应用程序.属性”中的 我使用对其进行了测试。第一个方法只添加了属性,但没有重写它们。

  • 我试图实现的是在application.yml文件上指定一个目录,该目录直接位于类路径上(在/resources下)。我希望能有这样的东西: 使用这种方法,IDE将始终默认为application-dev.yml。当我通过gradle构建应用程序,并在传递命令行参数的同时运行它时,我可以指定配置文件,从而加载适当的文件。理想情况下,能够做到这一点: java-jar-dspring.profile

  • 我希望外部文件的属性覆盖内部值(如果它们存在于外部文件中)。 在我的configuration类中,我使用PropertySource注释设置文件:

  • 我想覆盖应用程序中定义的属性。属性通过cmd与应用程序中现有的其他属性。属性,但仅允许提供预定义值。 我需要的是通过应用程序中已经存在的命令行传递调度的参数。属性,它将更改在调度中定义的默认值。 我的问题是,当我从cmd执行jar文件时,它正在获取构建时存在于中的值。它没有覆盖现有值值。我想根据用户需要覆盖值。 Spring代码 应用属性 在cmd中