14.6.1 手动刷新配置属性
在第 16 章中,我们将介绍 Spring Boot Actuator,它是一个 Spring Boot 基础组件,它支持观察和有限操作应用程序 的运行时信息,例如修改日志记录级别。但现在,我们将看一个具体的 Actuator 特征,仅在配置为 Spring Cloud Config Server 客户端时才启用。
每当您配置一个应用程序使用 Config Server 的配置服务,自动配置还可以配置一个 Actuator 接口以用于刷新配置。要使用此接口,您需要添加 Actuator 依赖项:
您可能已经猜到的,这个依赖项也可以从 Spring Initializr 中获得,通过勾选 Actuator
复选框。
有了 Actuator,您就可以任何时候对 /actuator/refresh
接口发送 HTTP POST 请求,强制从后端存储中获取最新配置。
要看到是如何实际操作的,先假设您有一个类 GreetingProps
,并添加了 @ConfigurationProperties 注解:
此外,您还有一个 Controller 类,它注入了 GreetingProps,对 GET 请求简单返回消息属性的值:
同时,在 Git 配置存储库中,有一个 application.yml
文件,其中有以下属性:
有了 Config Server 和这个简单的配置客户端,对接口 /hello
的 HTTP GET 请求将产生以下响应:
现在,在不重启 Config Server 和应用程序的情况下,更改 application.yml
文件中的 greeting.message
属性值,并将其推入后端 Git 存储库:
如果您对应用程序发出同样的 GET 请求,您仍然会得到同样的“Hello World!” 响应,即使 Git 中的配置已更改。但是,您可以通过发送 POST 请求来强制刷新:
请注意,响应是一个 JSON 数组包,其中含了已经更改的属性的名称 。该数组中包含 greeting.message
属性。还包括 config.client.version
属性,这个属性保存的是 Git 提交的哈希值。因为现在的配置是基于一个新的 Git 提交,每当文件中有任何更改时,这个属性都会更改。
POST 请求的响应告诉您 greeting.message
已更改。再次向 /hello
路径发出 GET 请求来验证一下:
不需要重新启动应用程序,也不需要重新启动 Config Server,应用程序为 greeting.message
属性使用了新值!
如果希望完全控制更新时机,调用 /actuator/refresh
接口非常合适。但如果应用程序是由多个微服务(可能每个服务还有多个实例),用这种方式将配置传播到所有应用就很繁琐。我们来看看怎么做到修改配置后,自动全部更新到所有应用中。
最后更新于