Spring Cloud 入门 (三): 配置自动刷新

本贴最后更新于 2246 天前,其中的信息可能已经天翻地覆

之前讲的配置管理, 只有在应用启动时会读取到 GIT 的内容, 之后只要应用不重启,GIT 中文件的修改,应用无法感知, 即使重启 Config Server 也不行。

比如上一单元(Spring Cloud 入门教程(二): 配置管理)中的 Hello World 应用,手动更新 GIT 中配置文件 config-client-dev.properties 的内容(别忘了用 GIT push 到服务器)

hello=Hello World from GIT version 1

刷新 http://locahost/8881/hello,页面内容仍然和之前一样,并没有反映 GIT 中最新改变, 重启 config-server 也一样,没有任何变化。要让客户端应用感知到这个变哈, Spring Cloud 提供了解决方案是,客户端用 POST 请求 /refresh 方法就可以刷新配置内容。

1. 让客户端支持/refresh 方法

要让/refresh 生效,客户端需要增加一些代码支持:

1). 首先,在 pom.xml 中添加以下依赖。spring-boot-starter-actuator 是一套监控的功能,可以监控程序在运行时状态,其中就包括 /refresh 的功能。

<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-actuatorartifactId>
<dependency>

2). 其次,开启 refresh 机制, 需要给加载变量的类上面加载 @RefreshScope注解,其它代码可不做任何改变,那么在客户端执行 /refresh 的时候就会更新此类下面的变量值,包括通过 config client 从 GIT 获取的配置。

@SpringBootApplication
@RestController
@RefreshScope
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }

    @Value("${hello}")
    String hello;
    @RequestMapping(value = "/hello")
    public String hello(){
        return hello;
    }
}

3). 启动应用, 查看 http://localhost:8881/hello

4). 再次修改 config-client-dev.properties 的内容

hello=Hello World from GIT version 2

5). 用 chome 的 postman 发送 POST 请求:http://localhost/refesh

imagepng

可以从 POST 的结果看到,此次 refresh 刷新的配置变量有 hello

6). 再次访问 http://localhost/hello,可见到配置已经被刷新

imagepng

2. 通过 Webhook 自动触发/refresh 方法刷新配置

以上每当 GIT 中配置文件被修改,仍然需要我们主动调用/refresh 方法(手动调用或者写代码调用), 有没有办法让 GIT 中配置有改动就自动触发客户端的 rfresh 机制呢? 答案是:有。可以通过 GIT 提供的 githook 来监听 push 命令,如果项目中使用了 Jenkins 等持续集成工具(也是利用 githook 来监听的),就可以监听事件处理中直接调用/refresh 方法就可以了。

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...