Nacos 提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务端和客户端支持。使用 Spring Cloud Alibaba Nacos Config。
spring.application.name=nacos-config # 配置中心地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # dataid 为 yaml 的文件扩展名配置方式 # `${spring.application.name}.${file-extension:properties}` spring.cloud.nacos.config.file-extension=yamlspring.cloud.nacos.config.namespace=71bb9785-231f-4eca-b4dc-6be446e12ff8
# 指定namespace
- 支持profile粒度的配置
spring.profiles.active=dev
- 支持自定义 Group 的配置
spring.cloud.nacos.config.group=DEVELOP_GROUP
- 支持自定义扩展的 Data Id 配置
# 自定义 Data Id 的配置 #不同工程的通用配置 支持共享的 DataId spring.cloud.nacos.config.sharedConfigs[0].data-id= common.yaml spring.cloud.nacos.config.sharedConfigs[0].group=REFRESH_GROUP spring.cloud.nacos.config.sharedConfigs[0].refresh=true # config external configuration # 支持一个应用多个 DataId 的配置 spring.cloud.nacos.config.extensionConfigs[0].data-id=ext-config-common01.properties spring.cloud.nacos.config.extensionConfigs[0].group=REFRESH_GROUP spring.cloud.nacos.config.extensionConfigs[0].refresh=true spring.cloud.nacos.config.extensionConfigs[1].data-id=ext-config-common02.properties spring.cloud.nacos.config.extensionConfigs[1].group=REFRESH_GROUP
优先级如下:
@RefreshScope
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解.@RestController @RefreshScope public class TestController { @Value("${common.age}") private String age; @GetMapping("/common") public String hello() { return age; } }
SpringBoot整合Nacos
@NacosPropertySource(dataId = "example", autoRefreshed = true)
@NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
通过两个注解配合使用,也可以不用写@RefreshScope注解。
client端是如何从配置中心获取配置的
配置中心配置发生变更client是如何感知的
集群架构下其他节点是如何同步配置数据的?
配置中心的架构
注意:不是去查mysql,而是去查询本地磁盘的缓存,所以直接修改mysql配置文件是不行的。修改配置需要发布ConfigDataEvent事件,触发本地文件和内存的更新。
加载配置文件先后顺序
源码入口:()
org.springframework.boot.env.PropertyPropertySourceLoader#load
PropertySourceLoader -> prepareContext() -> ApplicationContextInitializer(PropertySourceBootStrapConfiguration).initialize()
PropertySourceLocator(NacosPropertySourceLocator).locationCollection(environment) -> loadSharedConfiguration -> loadExtConfiguration -> loadApplicationConfiguration。
nacos config client源码分析
配置中心核心接口ConfigServiceClient获取配置
获取配置的主要方法是 NacosConfigService 类的 getConfig 方法,通常情况下该方法直接从本地文件中取得配置的值,如果本地文件不存在或者内容为空,则再通过 HTTP GET 方法从远端拉取配置,并保存到本地快照中。当通过 HTTP 获取远端配置时,Nacos 提供了两种熔断策略,一是超时时间,二是最大重试次数,默认重试三次。Nacos Server 在启动的时候怎么将所有的配置文件信息 Dump 到磁盘上的?
DumpService,在更新md5内容的时候,会发布一个事件,通知客户端进行配置更新。
动态刷新原理
spring实例化Bean之后,会调用事件监听器:NacosContextRefresher ,它实现了ApplicationListener<ApplicationReadyEvent>.
registerNacosListenersForApplications() -> NacosPropertySource.getDataId() -> registerNacosListener(propertySource.getGroup(), dataId);
2.2.2 注册监听器
配置中心客户端会通过对配置项注册监听器达到在配置项变更的时候执行回调的功能。End!
标签:中心,spring,配置,Nacos,nacos,config,cloud From: https://www.cnblogs.com/zhf123/p/16971499.html