目录
版本说明
个人认为分析配置中心的源码要比注册中心更需要spring boot源码的理解,主要体现在更新或者刷新容器内部配置文件内容。
主要分为两部分讲解:1、spring boot启动集成nacos及拉取远端配置信息;2、nacos动态更新配置,客户端如何感知并在未重启应用的情况下如何刷新配置。
spring-boot版本:1.5.21.RELEASE
spring-cloud-alibaba版本:1.5.1.RELEASE
nacos版本:1.x
nacos官方示例
在分析源码之前我们先来看一个nacos官方example示例:
public class ConfigExample {
public static void main(String[] args) throws NacosException, InterruptedException {
String serverAddr = "127.0.0.1";
String dataId = "test";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
//根据dataId获取配置信息
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
//添加配置信息变更的监听器
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("receive:" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
//发布变更配置信息
boolean isPublishOk = configService.publishConfig(dataId, group, "content");
System.out.println(isPublishOk);
Thread.sleep(3000);
content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
//根据dataId删除配置信息
boolean isRemoveOk = configService.removeConfig(dataId, group);
System.out.println(isRemoveOk);
Thread.sleep(3000);
content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
Thread.sleep(300000);
}
}
执行结果:
根据示例结果我们先来认识一下nacos核心组件ConfigService,通过这个configS