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 & Idea启动tomcat的中文乱码问题

    解决Java & Idea启动tomcat的中文乱码问题

    这篇文章主要介绍了Java & Idea启动tomcat的中文乱码问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 浅析java快速排序算法

    浅析java快速排序算法

    这篇文章主要介绍了浅析java快速排序算法,需要的朋友可以参考下
    2015-02-02
  • Java对称加密工作模式原理详解

    Java对称加密工作模式原理详解

    这篇文章主要介绍了Java对称加密工作模式原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • SpringBoot整合MyBatis-Plus的示例代码

    SpringBoot整合MyBatis-Plus的示例代码

    这篇文章主要介绍了SpringBoot整合MyBatis-Plus的示例代码,使用 MyBatis-Plus 可以减少大量的开发时间,单表的增删改查可以不用写 sql 语句,本文主要介绍整合需要主要事项,需要的朋友可以参考下
    2022-03-03
  • Redis六大数据类型使用方法详解

    Redis六大数据类型使用方法详解

    这篇文章主要介绍了Redis六大数据类型使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java log4j详细教程

    Java log4j详细教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包
    2015-11-11
  • Windows配置多版本JDK的详细步骤

    Windows配置多版本JDK的详细步骤

    JDK是Java开发工具包的缩写,包含了Java编译器、Java虚拟机、Java类库等众多组件,是Java开发的基石,提供了编写、编译和运行Java程序所必需的工具,有时候项目需要不同的JDK版本,所以本文给大家介绍了Windows配置多版本JDK的详细步骤,需要的朋友可以参考下
    2025-04-04
  • flutter TabBarView 动态添加删除页面的示例代码

    flutter TabBarView 动态添加删除页面的示例代码

    在Flutter中使用TabBarView动态添加和删除页面时,如果未为每个页面设置唯一的key,会导致删除页面时出现状态错误或删除错误的页面,正确的做法是为每个页面指定全局唯一的key,这样可以确保页面在添加和删除时状态正确,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • java虚拟机JVM类加载机制原理(面试必问)

    java虚拟机JVM类加载机制原理(面试必问)

    这篇文章主要介绍了面试当中必会问到的java虚拟机JVM类加载机制,非常的详细,有需要的朋友可以借鉴参考下,欢迎多多交流讨论
    2021-08-08
  • Java集合之HashMap/hashTable详解

    Java集合之HashMap/hashTable详解

    这篇文章主要介绍了Java集合之HashMap/hashTable详解,Map是映射键值的对象,map不能包含重复键:每个键最多只能映射一个值,它模拟了数学函数的抽象,需要的朋友可以参考下
    2023-09-09

最新评论