使用 Spring Boot Cloud Config 更改类路径中的 application.properties
Use Spring Boot Cloud Config to change application.properties in classpath
我必须在我的 Spring 引导应用程序运行期间更改自定义定义的 spring 属性(通过 @ConfigurationProperties bean 定义)。
使用 Spring Cloud Config 是否有优雅的方式来做到这一点?
我不想在 git 存储库中使用外部 application.properties(因为 spring 引导应用程序已交付给客户,我不想创建 git 每个人的存储库)。
我只想访问和更改我的 Spring 容器中的本地 application.properties(类路径中的那个,位于 src/main/resources)文件或(如果那不可能)在 Spring 云配置服务器中,我可以将其嵌入到我的 Spring 启动应用程序中。这有可能吗?
顺便说一句:目标是为客户创建一个可视化编辑器,以便他们可以在运行时在 spring 启动应用程序中更改 application.properties。
Spring Boot 支持基于配置文件的应用程序配置。只需添加 application-<profile>.properties
文件。然后就在 运行 将应用程序 select 配置文件根据环境使用 spring.profiles.active
.
-Dspring.profiles.active=dev
这将 运行 带有 application-dev.properties
文件的应用程序(覆盖默认的 application.properties
,即您可以将通用内容保留在默认文件中,并根据环境)
附带说明一下,拥有用于配置的回购并不是必须的。您可以将它们放在 class 路径中并给出 search-location
.
spring:
application:
name: config-server
profiles:
active: native
cloud:
config:
server:
native:
search-locations: classpath:configs/
这实际上是可能的,而且最终很容易实现。我花了一整天的时间来收集所有信息。也许这对某人有帮助:
你基本上只需要 Spring Actuator,但对于某个端点,你还需要 spring 云依赖。 (向 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
现在,如果您向 /actuator/env 端点发送一个 POST 请求,并在 HTTP 主体中以 {"name":"...", "value" 的形式包含一个对象: “...”}(名称是配置的名称 属性),然后您的配置就会更改。要检查这一点,您可以向 /actuator/env/[name_of_config_property] 发出 GET 请求,然后查看您的配置 属性 是否已更改。无需重新启动您的应用程序。
如果您使用自定义的,请不要忘记在您的 SecurityConfig 中保护 /actuator 端点。
在我看来,您既不需要配置 类 中的 @RefreshScope 注释,也不需要 /actuator/refresh 端点来“应用”配置更改。
我必须在我的 Spring 引导应用程序运行期间更改自定义定义的 spring 属性(通过 @ConfigurationProperties bean 定义)。
使用 Spring Cloud Config 是否有优雅的方式来做到这一点?
我不想在 git 存储库中使用外部 application.properties(因为 spring 引导应用程序已交付给客户,我不想创建 git 每个人的存储库)。
我只想访问和更改我的 Spring 容器中的本地 application.properties(类路径中的那个,位于 src/main/resources)文件或(如果那不可能)在 Spring 云配置服务器中,我可以将其嵌入到我的 Spring 启动应用程序中。这有可能吗?
顺便说一句:目标是为客户创建一个可视化编辑器,以便他们可以在运行时在 spring 启动应用程序中更改 application.properties。
Spring Boot 支持基于配置文件的应用程序配置。只需添加 application-<profile>.properties
文件。然后就在 运行 将应用程序 select 配置文件根据环境使用 spring.profiles.active
.
-Dspring.profiles.active=dev
这将 运行 带有 application-dev.properties
文件的应用程序(覆盖默认的 application.properties
,即您可以将通用内容保留在默认文件中,并根据环境)
附带说明一下,拥有用于配置的回购并不是必须的。您可以将它们放在 class 路径中并给出 search-location
.
spring:
application:
name: config-server
profiles:
active: native
cloud:
config:
server:
native:
search-locations: classpath:configs/
这实际上是可能的,而且最终很容易实现。我花了一整天的时间来收集所有信息。也许这对某人有帮助:
你基本上只需要 Spring Actuator,但对于某个端点,你还需要 spring 云依赖。 (向 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
现在,如果您向 /actuator/env 端点发送一个 POST 请求,并在 HTTP 主体中以 {"name":"...", "value" 的形式包含一个对象: “...”}(名称是配置的名称 属性),然后您的配置就会更改。要检查这一点,您可以向 /actuator/env/[name_of_config_property] 发出 GET 请求,然后查看您的配置 属性 是否已更改。无需重新启动您的应用程序。
如果您使用自定义的,请不要忘记在您的 SecurityConfig 中保护 /actuator 端点。
在我看来,您既不需要配置 类 中的 @RefreshScope 注释,也不需要 /actuator/refresh 端点来“应用”配置更改。