Nacos - 配置中心
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=yaml
# 指定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
@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源码分析

Client获取配置

Nacos Server 在启动的时候怎么将所有的配置文件信息 Dump 到磁盘上的?
DumpService,在更新md5内容的时候,会发布一个事件,通知客户端进行配置更新。
动态刷新原理
spring实例化Bean之后,会调用事件监听器:NacosContextRefresher ,它实现了ApplicationListener<ApplicationReadyEvent>.
registerNacosListenersForApplications() -> NacosPropertySource.getDataId() -> registerNacosListener(propertySource.getGroup(), dataId);
2.2.2 注册监听器
End!
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)