springcloud实战之Config(2)

Refresh

依赖(父 pom 已经添加过)

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

对需要刷新的类加上注解@RefreshScope

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
@RefreshScope //不配置这个注解刷新的时候会报错
public class HelloController {
//这个@Value会根据配置的配置中心地址找到git仓库对应的配置和本地服务的配置文件
@Value("${config.hello}")
private String hello;

@RequestMapping("testConfig")
public String test() {
return "读取到配置中心:" + hello;
}
}

client 端配置,将端口暴露

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: refresh

Server 端配置,将端口暴露

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: "*"

测试

启动 server 与 client,修改 git 上的 dev 配置属性,通过 post 请求的方式更新配置文件:
springcloud实战之Config(2)_2019-12-02-14-18-14.png
springcloud实战之Config(2)_2019-12-02-14-18-50.png
再次访问 http://localhost:8771/testConfig就可以得到最新的配置结果。

Webhook

原理

WebHook 是当某个事件发生时,通过发送 http post 请求的方式来通知信息接收方。Webhook 来监测你在 Github.com 上的各种事件,最常见的莫过于 push 事件。如果你设置了一个监测 push 事件的 Webhook,那么每当你的这个项目有了任何提交,这个 Webhook 都会被触发,这时 Github 就会发送一个 HTTP POST 请求到你配置好的地址。

配置

如此一来,你就可以通过这种方式去自动完成一些重复性工作,比如,你可以用 Webhook 来自动触发一些持续集成(CI)工具的运作,比如 Travis CI;又或者是通过 Webhook 去部署你的线上服务器。下图就是 github 上面的 webhook 配置。

springcloud实战之Config(2)_2019-12-03-13-59-00.png

  • Payload URL :触发后回调的 URL
  • Content type :数据格式,两种一般使用 json
  • Secret :用作给 POST 的 body 加密的字符串。采用 HMAC 算法
  • events :触发的事件列表。

总结

如果项目少配置少的情况可以通过/refresh 来手动刷新配置,可以利用 Webhook 的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍;如果项目比较复杂的情况呢这种肯定是行不通的,Spring Cloud Bus 消息总线可以解决配置修改的真正的动态刷新。详见springcloud实战之Config(4)

参考资料

配置中心 Spring Cloud Config 初体验

文章目录
  1. 1. Refresh
    1. 1.1. 依赖(父 pom 已经添加过)
    2. 1.2. 对需要刷新的类加上注解@RefreshScope
    3. 1.3. client 端配置,将端口暴露
    4. 1.4. Server 端配置,将端口暴露
  2. 2. 测试
  3. 3. Webhook
    1. 3.1. 原理
    2. 3.2. 配置
  4. 4. 总结
  5. 5. 参考资料
|