private void loadApplicationConfiguration(CompositePropertySource compositePropertySource, String dataIdPrefix,NacosConfigProperties properties, Environment environment) {String fileExtension = properties.getFileExtension();String nacosGroup = properties.getGroup();// load directly once by defaultloadNacosDataIfPresent(compositePropertySource, dataIdPrefix, nacosGroup,fileExtension, true);// load with suffix, which have a higher priority than the defaultloadNacosDataIfPresent(compositePropertySource,dataIdPrefix + DOT + fileExtension, nacosGroup, fileExtension, true);// Loaded with profile, which have a higher priority than the suffixfor (String profile : environment.getActiveProfiles()) {String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtension;loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup,fileExtension, true);} }加载过程中,通过 namespace, dataId, group 唯一定位一个配置文件
具体细节就不展开讲了,可以自己看源码了解
- 首先获取本地缓存的配置,如果有直接返回
- 如果步骤1从本地没找到相应配置文件,开始从远处拉去,Nacos 2.0 以上版本使用 Grpc 协议进行远程通信,1.0 及以下使用 Http 协议进行远程通信
- 对拉去到的字符串进行解析,封装成 NacosPropertySource 返回
Zookeeper、Consul 的接入也是非常简单,可以自己分析一遍 。如果我们有自研的配置中心,需要在 SpringCloud 环境下使用,可以根据 SpringCloud 提供的这些扩展参考以上几种实现快速的写个 starter 进行接入 。
总结本篇文章主要讲了下 Spring SPI 机制、SpringBoot 自动装配原理,以及扩展点 ApplicationContextInitializer 在集成配置中心时的应用 。篇幅有限,一些具体代码细节就没展开讲了,以后会出些文章针对某一个点进行详细讲解 。
个人开源项目DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类 。

文章插图
目前累计 2k star,代码优雅,使用了大量设计模式,如果你觉得看这些大型框架源码费劲,那么可以尝试从 DynamicTp 源码入手,欢迎大家了解试用
官网:https://dynamictp.cn
gitee地址:https://gitee.com/dromara/dynamic-tp
github地址:https://github.com/dromara/dynamic-tp
经验总结扩展阅读
- 年纪大了,这些星座就喜欢看甜甜的恋爱
- 胸闷是什么感觉
- 虽然单身时花心,但这些星座一旦恋爱就十分专一
- 主动创造激情,这些星座的爱越来越有深度
- 跟前任碰到,这些星座会落落大方
- 哪些星座男在恋爱中吵架,永远不知道错哪了
- 重燃爱火,这些星座配对有可能分手后还会和好
- 爱情的阴沟里不知道翻了多少次船的星座
- 剑盾如何联网
- 爱情早已戒掉,这些星座只想做自己的王者
