Spring Cloud 学习笔记 ——Spring Cloud Config 动态刷新

13.5 动态刷新

在 Git 中的配置文件更改后,默认 config server 可以及时感知到变化,但 config client 不会及时感知到变化,config-client 只有重启才能加载到最新文件,为了解决这个问题,介绍一种使用 spring-boot-start-acuator 解决办法

  • 1.在 config client 的 pom.xml 中添加 spring-boot-start-acuator 依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>
  • 2.添加配置,使 actuator 中的 refresh 端点暴露出来,即在 bootstrap.properties 中添加management.endpoints.web.exposure.include=refresh:
# 下面三行配置分别对应 config-server 中的{application}、{profile}、{label}占位符
spring.application.name=client1
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#注释原来写死的内容
#spring.cloud.config.uri=http://localhost:8081
server.port=8082

spring.cloud.config.username=javaboy
spring.cloud.config.password=123

# eureka 注册地址
eureka.client.service-url.defaultZone=http://localhost:1111/eureka

# 启动 spring cloud 配置发现
spring.cloud.config.discovery.enabled=true
# spring cloud 配置发现的服务名
spring.cloud.config.discovery.service-id=config-server

# 把 actuator 的 refresh 端点暴露出来
management.endpoints.web.exposure.include=refresh
  • 3.在 config client 的使用了配置文件的地方,加上 @RefreshScope 注解:
@RestController
@RefreshScope
public class HelloController {
    @Value("${javaboy}")
    String javaboy;
    @GetMapping("/hello")
    public String hello(){
        return javaboy;
    }
}
  • 4.当配置文件改动后,只需要调用 refresh 端点,config client 中的配置就可以自动刷新了
    正常访问未调用 refresh 地址:
    在这里插入图片描述
    修改 Git 仓库的 client1-dev.properties 文件,使密文是 dev888 生产的
    在这里插入图片描述
    提交到 Git
    在这里插入图片描述
    第二次正常访问未调用 refresh 地址:management.endpoints.web.exposure.include=refresh,结果没变:
    在这里插入图片描述
    而访问 config server 时,发现已经更改为 dev888
    在这里插入图片描述
    调用 refresh 接口
    在这里插入图片描述
    调用完成
    在这里插入图片描述
    最后,第三次正常访问调用 refresh 地址:
    在这里插入图片描述
    变成 dev888 了,这样就不用重启 config client 服务就能加载配置文件了,这就是利用 spring boot actuctor 动态刷新配置文件的方式。
  • 5.这样虽然是一种解决方案,但是有一个弊端就是如果有很多地方获取配置文件,每个地方都要加 @RefreshScope 注解吗,比如与上百个这样的地方,怎么办?这里先做简单提及,可以使用 Spring Cloud Bus 来解决,具体的方案以后完善博客;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值