使用Spring Boot Cloud Config更改类路径中的application.properties



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

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

我不想在git存储库中使用外部application.properties(因为spring-boot应用程序已经交付给客户,我不想为他们中的每个人创建git存储池(。

我只想访问和更改Spring容器中的本地application.properties(类路径中的一个,位于src/main/resources中(文件,或者(如果不可能的话(Spring Cloud Config Server中的文件,我可以将其嵌入到我的Spring Boot应用程序中。这有可能吗?

BTW:目标是为客户创建一个可视化编辑器,这样他们就可以在春季启动应用程序的运行时更改application.properties。

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

您基本上只需要SpringActuator,但对于某个端点,您还需要Spring-cloud依赖项。(向Spring Actuator的/env端点发出Post请求(

要在运行时更改配置,只需在application.properties中添加以下内容:

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

现在,如果您向/activator/env端点发送POST请求,其中HTTP主体中有一个对象,其形式为{"名称":"…","值":".."}(名称是配置属性的名称(,那么您的配置就会更改。要检查这一点,您可以向/activator/env/[name_of_config_property]发出GET请求,并查看您的配置属性是否已更改。无需重新启动您的应用程序。

如果使用自定义端点,请不要忘记在SecurityConfig中保护/executor端点。

在我看来,您既不需要配置类中的@RefreshScope注释,也不需要/executor/refresh端点来";应用";配置更改。

Spring Boot支持基于概要文件的应用程序配置。只需添加application-<profile>.properties文件。然后,就在运行应用程序时,根据使用spring.profiles.active的环境选择配置文件。

-Dspring.profiles.active=dev

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

顺便说一句,配置回购不是必须的。您可以将它们放在类路径中,并给出search-location

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

也许您想要的可以通过Spring云配置和Spring云总线来实现。这里解释如下:https://cloud.spring.io/spring-cloud-config/reference/html/#_push_notifications_and_spring_cloud_bus

总之,配置上的任何更改都会向spring云总线发送一个事件,然后您可以使用新属性重新加载应用程序上下文或配置。

最新更新