SpringCloud 组件之集成 Config 实现配置自动刷新
一、项目说明
之前已经在 SpringCloud 组件之集成 Config 实现分布式配置 文中实现了 Config 的分布式配置,存在以下问题:
对 gitee 远程仓库中的配置文件进行修改,发现 config-server 无需重启,就可获取最新配置,而 config-client 却获取不到,需要重启才能获取最新配置。
本文在该项目的基础上对代码进行修改,实现配置自动刷新。
二、实现配置自动刷新
主要是对 config-client 端进行修改。
1.添加依赖
pom.xml 文件中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.添加配置
修改 bootstrap.yml 文件,添加如下配置,暴露监控端点:
management:
endpoints:
web:
exposure:
include: "*"
3.控制类添加注解
注意:不能在控制类直接添加注解 @RefreshScope,否则获取的配置值为空
(1).新建数据配置类
新建数据配置类,添加注解 @RefreshScope
package com.chaoyue.configclient.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class ConfigData {
@Value("${config.info}")
private String configInfo;
public String getConfigInfo() {
return configInfo;
}
}
(2).修改控制类
修改控制类:
package com.chaoyue.configclient.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigClientController {
@Autowired
private ConfigData configData;
@GetMapping("/configInfo")
private String getConfigInfo() {
return configData.getConfigInfo();
}
}
4.启动测试
启动服务后,修改 gitee远程仓库 config-uat.yml 文件内容,浏览器输入:http://localhost:8082/configInfo,发现并未立即获得最新值,需要输入以下命令生效:
curl -X POST "http://localhost:8082/actuator/refresh"