Nacos Config Spring Cloud
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos Config Spring Cloud相关的知识,希望对你有一定的参考价值。
参考技术A 这里分析下Nacos Config在Spring Cloud下的使用。整体调用链路如下表所示。加载了spring.cloud.nacos相关配置,生成NacosConfigProperties。
初始化了NacosConfigManager,主要是根据NacosConfigProperties初始化了ConfigService,这个也是Nacos Client 对外保留的核心对象,用于获取配置,添加监听等。
用于初始化了NacosPropertySourceLocator对象,实现了PropertySourceLocator接口,用于加载额外的配置信息。
加载分布式的配置,形如spring.cloud.nacos.config.shared-configs[0]=xxx 的配置。
加载扩展配置,如spring.cloud.nacos.config.extension-configs[0]=xxx ,其实我没搞明白这俩有啥区别。
加载应用主配置信息,这里会加载默认的两个配置,dataIdPrefix+group与dataIdPrefix.fileExtension+group,如果不想加载可以通过配置spring.cloud.nacos.config.group=来避免加载,只加载上面的shared-configs与extension-configs的配置。
这里会判断是否有父Context并且包含了NacosConfigProperties,如果有从父Context中直接获取。
初始化了NacosRefreshHistory,用于存储Nacos数据更新历史,最大存储20条。
初始化了NacosConfigManager,与上面的一致。
初始化了NacosContextRefresher,这个是比较核心的类,这个类实现了ApplicationListener,监听ApplicationReadyEvent事件,在Application完成的时候,执行Nacos变化监听。
registerNacosListenersForApplications() --> registerNacosListener() --> 这里会新建一个Listener,并通过configService#addListener()方法添加到Nacos的变化监听中。当收到变化的时候,首先添加了刷新纪录nacosRefreshHistory#addRefreshRecord(),其次发布了RefreshEvent事件。
在发布了RefreshEvent事件之后,就可以使用 Spring Cloud自带的RefreshScope机制 来实现属性的刷新了。在Spring Cloud 监听到变化,会执行ContextRefresher#refresh()。首先会重新加载引导信息,也就会重新调用NacosPropertySourceLocator#locate(),从而从Nacos中读取最新的配置。其次会清空缓存对象,重新以最新的Enviroment生成对象,来达到属性更新的目的。
整体来说Nacos Config在Spring Cloud的实现比较简单。核心使用了Spring Cloud的RefreshScope机制来实现对象属性的动态刷新。
spring cloud Nacos Config配置中心
概述
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos Config就是一个类似于SpringCloud Config的配置中心
接入
SpringCloud项目集成Nacos Config配置中心很简单。只需要部署Nacos 客户端并在里面添加配置即可。然后引入Nacos Config动态读取即可
1. 创建一个SpringCloud工程cloud-config 修改 pom.xml 文件,引入 Nacos Config Starter
前提得选引入spring-cloud-alibaba-dependencies
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 修改application.properties配置
server.port=18085
management.endpoints.web.exposure.include=*
3. 新建bootstrap.properties文件
spring.application.name=cloud-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
4. 启动Nacos客户端
具体步骤可参考 上篇文章
5. 配置列表新增配置
dataId :格式如下 ${prefix} - ${spring.profiles.active} . ${file-extension}
prefix 默认为 spring.application.name 的值
spring.profiles.active 当前环境对应的 profile
file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。
group 默认DEFAULT_GROUP
当activeprofile 为空时直接填写 spring.application.name值即可 默认properties
5. 添加Controller并在类上添加 @RefreshScope动态获取配置中心的值
@RestController
@RefreshScope
public class SampleController {
@Value("${user.name}")
String userName;
@Value("${user.age}")
int age;
@RequestMapping("/user")
public String simple() {
return "获取 Nacos Config配置如下:" + userName + " " + age + "!";
}
}
6.启动测试
这样就可以获取到配置中心的值。并且配置中心修改值后。可以立即动态刷新获取最新的值
以上是关于Nacos Config Spring Cloud的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud——Spring Cloud Alibaba 2021 Nacos Config bootstrap 配置文件失效解决方案
SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置数据;MySQL持久化;Nacos集群
SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置中心