springboot中nacos-client获取配置的实现方法

 更新时间:2023年04月27日 14:40:43   作者:趣开源  
本文主要介绍了springboot中nacos-client获取配置的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在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自动装配的解析。

image.png

再看spring.factories

image.png

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这个方法

image.png

其中加载了NacosConfigApplicationContextInitializer这个类,实现了ApplicationContextInitializer,这个接口在springboot启动过程中是很重要的,会初始化一些东西

image.png

image.png

为了更方便的看到结果,我打个断点到loadConfig中,主要看reqGlobalNacosConfig方法

image.png

在reqGlobalNacosConfig方法中,我们看到我们熟悉的dataIds,这个是在配置中配置的,对应的nacos服务端的配置,配置的dataIds是以逗号分隔的字符串,这里主要是将dataIds字符串转换成数组:

image.png

最终会走到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的配置是怎么拿到的。

image.png

本文章只提供看源码的思路,如果想具体了解nacos获取配置的全过程,还需要你真正的去debug源码。

我这里留一个小问题,大家可以思考一下:NacosConfigEnvironmentProcessor类 什么时候被springboot加载的。

到此这篇关于springboot中nacos-client获取配置的实现方法的文章就介绍到这了,更多相关springboot nacos-client获取配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 图解Java经典算法冒泡排序的原理与实现

    图解Java经典算法冒泡排序的原理与实现

    冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
    2022-09-09
  • Java实现数组转字符串及字符串转数组的方法分析

    Java实现数组转字符串及字符串转数组的方法分析

    这篇文章主要介绍了Java实现数组转字符串及字符串转数组的方法,结合实例形式分析了Java字符串及数组相关的分割、遍历、追加等操作技巧,需要的朋友可以参考下
    2018-06-06
  • spring如何解决循环依赖问题

    spring如何解决循环依赖问题

    Spring在单例模式下用三级缓存设计解决setter方法注入bean属性循环依赖问题,但无法解决多例Bean和构造方法注入参数的循环依赖,三级缓存通过A、B两对象互相注入属性的过程解决循环依赖,其中,构造方法的循环依赖无法解决是因为创建对象会走构造方法
    2024-10-10
  • JAVA使用Ldap操作AD域的方法示例

    JAVA使用Ldap操作AD域的方法示例

    这篇文章主要介绍了JAVA使用Ldap操作AD域的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 关于SpringBoot的自动装配原理详解

    关于SpringBoot的自动装配原理详解

    这篇文章主要介绍了关于SpringBoot的自动装配原理详解,Spring Boot自动装配原理是指Spring Boot在启动时自动扫描项目中的依赖关系,根据依赖关系自动配置相应的Bean,从而简化了Spring应用的配置过程,需要的朋友可以参考下
    2023-07-07
  • java实现文件拷贝的七种方式

    java实现文件拷贝的七种方式

    这篇文章主要介绍了java实现文件拷贝的七种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • hadoop的wordcount实例代码

    hadoop的wordcount实例代码

    这篇文章主要介绍了hadoop的wordcount实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • eclipse的web项目实现Javaweb购物车的方法

    eclipse的web项目实现Javaweb购物车的方法

    这篇文章主要介绍了eclipse的web项目实现Javaweb购物车的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Java多线程实现Callable接口

    Java多线程实现Callable接口

    本文给大家分享的是使用Java多线程来实现callable接口的方法,以及使用方法,另外还有一个网友的实例,希望能够对大家掌握Java多线程有所帮助。
    2016-06-06
  • 解决@FeignClient注入service失败问题

    解决@FeignClient注入service失败问题

    这篇文章主要介绍了解决@FeignClient注入service失败问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论