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

使用Spring Boot Cloud配置更改应用程序。类路径中的属性

呼延辰龙
2023-03-14

我必须在Spring Boot应用程序的运行时更改自定义的spring属性(通过@ConfigurationProperties bean定义)。

使用Spring云配置有什么优雅的方法可以做到这一点吗?

我不想使用外部应用程序。git存储库中的属性(因为spring boot应用程序已交付给客户,我不想为他们每个人创建git存储库)。

我只想访问并更改本地应用程序。属性(类路径中的一个,位于src/main/resources)文件,在我的Spring容器中或(如果不可能)在Spring云配置服务器中,我可以将其嵌入我的Spring Boot应用程序中。这有可能吗?

顺便说一句:目标是为客户创建一个可视化编辑器,以便他们可以更改应用程序。在spring boot应用程序中运行时的属性。

共有2个答案

燕烨
2023-03-14

这实际上是可能的,而且最终很容易实现。我花了一整天的时间才把所有的信息收集起来。也许这对某人有帮助:

您基本上只需要Spring Actuator,但对于某个endpoint,您还需要Spring云依赖项。(向Spring Actuator的 /envendpoint发出Post请求)

要在运行时更改配置,只需将以下内容添加到应用程序中。属性:

management.endpoints.web.exposure.include: env,refresh
management.endpoint.env.post.enabled: true //this property is only available when spring cloud is added as dependency to your project

如果你(像我一样)不需要外部化配置的功能,那么你还必须添加以下内容(否则,你的Spring应用程序将无法启动,并抛出一个缺少某些配置的错误)

spring.cloud.config.enabled: false

现在,如果您向 /actuator/envendpoint发送POST请求,其中HTTP正文中的对象形式为{"name":"...","value":"..."}(name是配置属性的名称),那么您的配置将更改。要检查这一点,您可以向 /actuator/env/[name_of_config_property]发出GET请求,然后查看您的配置属性是否已更改。无需重新启动应用程序。

如果使用自定义endpoint,请不要忘记在SecurityConfig中保护/执行器endpoint。

在我看来,您既不需要配置类中的@RefreshScope注释,也不需要/actuator/refreshendpoint来“应用”配置更改。

汪建德
2023-03-14

Spring Boot支持基于配置文件的应用程序配置。只需添加应用程序-

-Dspring.profiles.active=dev

这将使用application-dev.properties文件运行应用程序(覆盖默认的application.properties,也就是说,您只需将常见内容保留在默认文件中,并根据环境更改其余内容)

另一方面,配置回购并不是必须的。您可以将它们放在类路径中,并给出搜索位置。

spring:
  application:
    name: config-server
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          search-locations: classpath:configs/

 类似资料:
  • 尝试运行spring项目时出现以下错误: 我认为这个错误可能是由于某些依赖项的版本冲突造成的,但我不是很确定。这是我的第一个Spring项目。 这是我更新的pom。xml文件 如果您发现任何错误,请随时指出并解释原因。尽可能多地学习。

  • 我正在使用springfox swagger 2.8.0。我想根据我的需求定制我的Swagger文档和API版本路径。能够使用应用程序修改版本路径。属性,并且它正在正常运行: 斯普林福克斯。文档大摇大摆路径=/v2/可用性服务 http://localhost:8080/context-path/v2/availability-service 但是想要我的留档URL如下,如何使用applicati

  • 我在使用DOMConfigurator的JavaEE Web应用程序中使用Log4j时面临一个问题。我的类路径log4j.jar文件,log4j.xml文件的路径 /WEB-INF/config/log4j.xml. 以下是例外情况: 下面是获取log4j的代码。servlet中的xml文件: 进入网页。xml

  • Compile Sdk Version: 指定Android的编译版本. 对应build.gradle文件中的参数是: compileSdkVersion 23 Build Tools Version: 指定构建工具的版本. 对应build.gradle文件中的参数是: buildToolsVersion "23.0.2" SDK编译版本和构建工具的版本都是我们已经下载到本地的,如果本地没有就

  • 我有个问题。尝试改变版本(就像它在互联网上说的),但没有帮助。我已经读过了,这些答案修正了应用程序的类路径,使它包含一个单一的、兼容的org.springframework.plugin.core.pluginregistry版本,但它也没有帮助。 问题: 更正应用程序的类路径,使其包含Org.SpringFramework.http.Converter.Support.AllEncompassi

  • 大家好,请帮助我解决这个错误,当我运行我的Spring Boot应用程序,这个错误弹出。我试过建议的方法,但还是不行。 依赖关系 更正应用程序的类路径,使其包含一个兼容的javax.persistence.table版本