背景
使用了SpringCloud的原生配置中心config
后,会发现当配置文件更新后,配置中心的客户端无法获取更新后的信息,这是由于配置中心的缓存机制导致的,而SpringCloud也提供了刷新的两种方式,今天就处记录一下其中一种——手动刷新的配置过程。
配置
- 手动刷新是依赖于健康检查
actuator
实现的。 - 以下均是在客户端操作的
- 此处已默认搭建好了配置中心
添加依赖
<!--健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
添加配置
- 否则Actuator只会默认打开health和info两个端口
#启用监控 默认打开health和info,* 表示开放所有端口
management.endpoints.web.exposure.include= *
#打印健康信息详情,
management.endpoint.health.show-details=always
添加注解
- 该注解
@RefreshScope
处代理的bean会在调用/refresh借口时被清空
/**
* @RefreshScope 配合actuator实现自动刷新配置中心
*/
@RefreshScope
@RestController
public class ClientController {
@Autowired
private GirlProperties girlProperties;
@GetMapping("/hello")
public String getProperties(){
return girlProperties.toString();
}
}
测试
1.访问获取配置文件的接口
2.修改git中的配置文件
3.再次访问获取配置文件的接口,会发现信息并没有改变
4.调用http://localhost:8092/actuator/refresh
- 为配置中心客户端的ip和端口
- 通过post方式访问
- 成功后返回修改的文件信息
5.这次访问时则成功获取最新的数据
特点
通过配置过程就会发现config手动刷新文件的方式只只适用于极少的客户端存在的情况,否则每次更新文件后都要调用一次刷新,反而在客户端过多的情况下加重服务的负担,所以配置中心更适合自动刷新的方式。