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

目录
  • 1、导入nacos的maven包
  • 2、nacos-config-spring-boot-autoconfigure解析
  • 3、NacosConfigEnvironmentProcessor逻辑解析

在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加载的。

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

(0)

相关推荐

  • SpringBoot使用Nacos配置中心的实现

    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云本机应用程序和微服务平台. Nacos基本上支持现在所有类型的服务,例如,Dubbo / gRPC服务,Spring Cloud RESTFul服务或Kubernetes服务. 尤其是使用Eureka注册中心的,并且担心Eureka闭源的开发者们,可以将注册中心修改为Nacos,本文主要介绍Naco

  • SpringBoot集成Nacos实现注册中心与配置中心流程详解

    目录 SpringBoot整合Nacos 引入Maven依赖 增加配置 示例代码 SpringBoot整合Nacos 引入Maven依赖 首先,我们还是要引入 Maven 依赖 <!--注册中心的依赖--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <v

  • SpringBoot使用Nacos动态配置数据源的方法

    SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的 而SpringCloud生态中有配置中心这一组件,我们可以将数据源连接属性编写在配置中心中,需要修改连接属性就可以从配置中心中修改并发布,这样就可以热修改数据源位置无需重启服务 那么下面实战说明如何将使用Nacos配置/注册中心配置数据源(请注意看我写的注释来避坑) 首先说明版本 SpringBoot 2.2.0.RELEASE Druid

  • springboot集成nacos的配置方法

    本文介绍了springboot集成nacos的配置方法,分享给大家,具体如下: nacos仓库:https://github.com/alibaba/nacos nacos介绍文档:https://nacos.io/zh-cn/docs/architecture.html nacos使用例子:https://github.com/nacos-group/nacos-examples springboot配置-集成nacos,例子代码下载 springboot-nacos-consumer spr

  • 关于springboot中nacos动态路由的配置

    目录 nacos动态路由的配置 1.作为一个动态路由维护管理的类 2.基于Nacos动态配置路由服务 3.yml配置 4. nacos网关配置 5.最后:我建的是 Springboot配置Nacos出现的问题 报错信息 具体如下 nacos动态路由的配置 什么都不说了,springboot-nacos 不懂得的下面自行学习啦我直接贴下代码! 首先... 我自己有个服务器.在无聊之时写的代码,主要是通过网关来调用接口所以有了下面的代码. 1.作为一个动态路由维护管理的类 @Service publ

  • springboot整合nacos,如何读取nacos配置文件

    目录 springboot整合nacos springboot集成nacos,本地运行正常,打包报错 问题 解决方案 springboot整合nacos 1.引入依赖 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.7</version&g

  • 聊聊SpringBoot整合Nacos自动刷新配置的问题

    目录 目的 环境 pom 配置文件 代码 日志 测试 目的 Nacos作为SpringBoot服务的注册中心和配置中心. 在NacosServer中修改配置文件,在SpringBoot不重启的情况下,获取到修改的内容. 本例将在配置文件中配置一个 cml.age=100 的配置项,程序中编写一个方法读取配置文件,并通过 Get--->/test/age 接口提供给浏览器访问. 若配置文件中的 age 修改为 200 ,不用重新启动程序,直接访问 /test/age 接口,将获取到最新的值 200

  • spring boot项目中如何使用nacos作为配置中心

    目录 使用nacos作为配置中心 1.pom.xml中引入nacos支持包 2.pom.xml中指向nacos 3.配置文件中使用nacos配置项 总结 使用nacos作为配置中心 利用nacos作为配置中心,好处不言而喻,配置外置了,与程序解耦,并且nacos还提供了友好的管理界面. spring boot的卖点之一,就是与之前的spring相比,所谓约定重于配置,配置文件大大简化. 现在使用nacos这种外置配置中心,是更加向前了一步. 具体应用步骤: 1.pom.xml中引入nacos支持

  • springboot读取nacos配置文件的实现

    目录 首先,Nacos 的配置文件如下 第一种方式来解析 第二种方式来解析 SpringBoot 注册服务到 Nacos 上,由 Nacos 来做服务的管理.在 Nacos的配置列表中,管理着服务的配置文件.SpringBoot 有两种方式来读取配置文件的内容,一种是写配置文件类 @ConfigurationProperties ,一种是使用 @Value 注解. 首先,Nacos 的配置文件如下 ### 配置文件使用 yml 格式, 也可以使用 properties 格式,最终 yml 格式会

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

    目录 1.导入nacos的maven包 2.nacos-config-spring-boot-autoconfigure解析 3.NacosConfigEnvironmentProcessor逻辑解析 在springboot中使用nacos的小伙伴是不是跟我有一样的好奇,springboot中nacos-client是怎么获取配置的?今天我跟了一下代码,大致的流程弄懂了,分享给大家. 1.导入nacos的maven包 <dependency> <groupId>com.alibab

  • 在SpringBoot中添加Redis及配置方法

    在实际的开发中,会有这样的场景.有一个微服务需要提供一个查询的服务,但是需要查询的数据库表的数据量十分庞大,查询所需要的时间很长. 此时就可以考虑在项目中加入缓存. 引入依赖 在maven项目中引入如下依赖.并且需要在本地安装redis. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifac

  • SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

    properties配置文件如下: human.name=Mr.Yu human.age=21 human.gender=male 如何把properties里面的配置绑定到JavaBean里面,以前我们的做法如下: public class PropertiesUtil { public static void getProperties(Person person) throws IOException { Properties properties = new Properties();

  • SpringBoot中的异常处理与参数校验的方法实现

    兄弟们好,这次来跟老铁交流两个问题,异常和参数校验,在说参数校验之前我们先来说异常处理吧,因为后面参数的校验会牵扯到异常处理这块的内容. 异常处理 说到异常处理,我不知道大家有没有写过或者遇到过如下的写法. public void saveUser() { try { // 所有的业务内容,目测几百行 }catch (Exception e) { e.printStackTrace(); } } 如果出现上述的代码,里面包含了大量的业务代码,如果是你写的,赶紧改掉,不是你写的找写的,吐槽赶紧改掉

  • SpringBoot中使用redis做分布式锁的方法

    一.模拟问题 最近在公司遇到一个问题,挂号系统是做的集群,比如启动了两个相同的服务,病人挂号的时候可能会出现同号的情况,比如两个病人挂出来的号都是上午2号.这就出现了问题,由于是集群部署的,所以单纯在代码中的方法中加锁是不能解决这种情况的.下面我将模拟这种情况,用redis做分布式锁来解决这个问题. 1.新建挂号明细表 2.在idea上新建项目 下图是创建好的项目结构,上面那个parent项目是其他项目不用管它,和新建的没有关系 3.开始创建controller,service,dao(mapp

  • Linux中scp命令获取远程文件的方法

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的,可能会稍微影响一下速度. 二.scp有什么用? 1.我们需要获得远程服务器上的某个文件,远程服务器既没有配置ftp服务器,没有开启web服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过scp命令便可轻松的达到目的: 2.我们需要将本机上的文件上传到远程服务器上,远程服务器没有开启ftp服务器或共享,无

  • SpringBoot2中使用@RequestHeader获取请求头的方法

    目录 一.使用@RequestHeader获取请求头 (一)获取某一个请求头 (二)获取数值型请求头 (三)一次性获取所有请求头 二.@RequestHeader注解详解 (一)name.value属性 (二)required属性 (三)defaultValue属性 springMVC/SpringBoot中提供了@RequestHeader注解用来获取请求头. 一.使用@RequestHeader获取请求头 (一)获取某一个请求头 例如,获取accept-language请求头: @GetMa

  • Springboot通过请求头获取当前用户信息方法详细示范

    目录 一.实现原理 二.导入依赖 三.配置文件 四.代码实现 五.总结 一.实现原理 1.token的存储 当用户登录时,将<token, userInfo>存入redis缓存中,以便鉴权与获取用户信息. 2.发送请求 每次发送请求时将token放入请求头中,令key为“Authorization”或其他值. 3.获取请求头部 ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRe

  • 在Java代码中解析html,获取其中的值方法

    有时我们获取到了页面需要在Java代码中进行解析,获取html中的数据,Jsoup是一个很方便的工具. 一.什么是Jsoup? 官网网站:http://jsoup.org/ 可在官网下载对应的jar 通俗的将Jsoup就是一个解析网页的东西 二.示例 1.页面,通过查询获取到了一些数据: 2.源码,这是一个table,class="list",通过这些来唯一标识它 3.代码,将html以String的形式传进来,使用Jsoup进行解析: import org.jsoup.Jsoup;

随机推荐