在springboot中运用nacos的小伙伴是不是跟我有一样的猎奇,springboot中nacos-client是怎样获取装备的?今天我跟了一下代码,大致的流程弄懂了,共享给咱们。
1、导入nacos的maven包
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.7</version>
</dependency>
2、nacos-config-spring-boot-autoconfigure解析
咱们就看主要的,nacos-client-spring-boot-starter中依靠了nacos-config-spring-boot-autoconfigure,主动安装的常识我就当咱们都了解哈,不了解的能够我留言,我会单独写一篇springboot主动安装的解析。
再看spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.boot.nacos.config.autoconfigure.NacosConfigAutoConfiguration
org.springframework.boot.env.EnvironmentPostProcessor=\
com.alibaba.boot.nacos.config.autoconfigure.NacosConfigEnvironmentProcessor
3、NacosConfigEnvironmentProcessor逻辑解析
咱们来看一下NacosConfigEnvironmentProcessor类中到底干了啥?完成了EnvironmentPostProcessor接口的postProcessEnvironment这个办法
其中加载了NacosConfigApplicationContextInitializer这个类,完成了ApplicationContextInitializer,这个接口在springboot启动过程中是很重要的,会初始化一些东西
为了更便利的看到成果,我打个断点到loadConfig中,主要看reqGlobalNacosConfig办法
在reqGlobalNacosConfig办法中,咱们看到咱们熟悉的dataIds,这个是在装备中装备的,对应的nacos服务端的装备,装备的dataIds是以逗号分隔的字符串,这儿主要是将dataIds字符串转换成数组:
最终会走到reqNacosConfig中,有个for循环来循环dataIds,NacosUtils.getContent办法就是通过dataId,拿到服务端的装备。底层还是通过http恳求访问的http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=xxx_database_config&group=DEFAULT_GROUP&tenant=xxx 接口,由于篇幅的原因,这儿就不解说了,咱们主要是看nacos的装备是怎样拿到的。
本文章只提供看源码的思路,假如想具体了解nacos获取装备的全过程,还需要你真正的去debug源码。
我这儿留一个小问题,咱们能够考虑一下: NacosConfigEnvironmentProcessor类 什么时候被springboot加载的。答对有奖