springcloud-config手动刷新和自动刷新实现
当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置
什么是手动刷新?
因为springcloud-config的服务端第一次读取远程git服务器的配置之后是会缓存一份配置在本地的,即使远程git修改了配置,config客户端也依然是读取缓存中的配置,而使用手动刷新可以强制刷新缓存,让config端读取最新配置文件.
什么是自动刷新?
springcloud-config的自动刷新需要配合springcloud-bus 消息总线来使用,会有线程实时监控配置是否修改,修改则自动刷新.但是这种方式比较损耗性能,如无必要刻意使用手动刷新.
springcloud config 实现步骤:
1. 引入依赖
客户端
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> <version>2.0.1.RELEASE</version> </dependency> <!-- actuator监控中心 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
服务端
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>2.0.1.RELEASE</version> </dependency>
2. 启动类添加注解
服务端启动类上加上@EnableConfigServer
3.抽取配置到远程git
远程git这里我使用码云,在码云开一个仓库,建立一个文件夹,然后文件夹下面放入测试的配置,文件名的取名一定是微服务应用名称+环境名称,因为最后config客户端来找配置文件是通过服务名和环境名称寻找
4. 客户端修改application.yml文件名为bootstrap.yml
如果不修改文件名,那么启动项目的时候回根据application.yml文件来启动,如果配置了数据库连接,当场就能报错,bootstrap.yml是专门启动的,在启动之前读取的配置文件
5.配置服务端和客户端的配置文件
服务端
客户端
6.在需要刷新的配置类上加上@RefreshScope注解
7. 调用刷新接口即可
然后调用http://127.0.0.1:8000/actuator/refresh即可刷新缓存,读取最新配置
这里只介绍手动刷新的方式,另外使用springcloud config其实不是最佳的选择,国内还有很多写的不错的分布式配置中心框架可以供大家选择,只是因为背景不如spring强大所以名声不显,但是很多比config好用不少,还自带后台管理.例如:携程Apollo,淘宝Diamond等,有兴趣的可以了解一下.
采坑介绍:
这里介绍一下新手可能会遇到的几个问题
1. config客户端的配置文件名称没改,我们需要改成bootstrap.yml
2. 远程配置文件读取失败,可能是文件名称不是以服务名和环境命名
3. 出现无法找到config服务端实例的情况,可能是你把eureka配置放到了远程git,因为config客户端需要拉去eureka的服务注册信息和config服务端通信