nacos config 配置中心解析

124 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

springboot中如何装配nacos

首先看springboot的spi机制

在nacos-config-spring-boot-autoconfigure jar中META-INF/spring.factories文件 (springboot2.7后不再用spring.factories)

启动类在运行静态run方法的时候,是先创建一个SpringApplication对象,再运行对象的run方法,工厂初始配置在构造函数中完成,run方法定义运行总体流程

初始化配置

springboot启动应用程序之前,会创建一些初始化对象和监听器

这个操作在构造方法中完成,根据配置文件,创建ApplicationContextInitializer.class,ApplicationListener.class两个接口的实现类

这里加载的初始化器是springboot自带初始化器,从从 META-INF/spring.factories 配置文件中加载的,那么这个文件在哪呢?自带有2个,分别在源码的jar包的 spring-boot-autoconfigure 项目 和 spring-boot 项目里面各有一个

spring.factories文件里面,看到开头是 org.springframework.context.ApplicationContextInitializer 接口就是初始化器了 ,

image.png

获取并启用监听器

image.png 这一步 通过监听器来实现初始化的的基本操作,这一步做了2件事情

  1. 创建所有 Spring 运行监听器并发布应用启动事件
  2. 启用监听器

image.png 将maven和系统的环境变量都加载进来

创建应用程序的上下文

实例化应用程序的上下文, 调用 createApplicationContext() 方法,这里就是用反射创建对象,没什么好说的;

实例化异常报告器

异常报告器是用来捕捉全局异常使用的,当springboot应用程序在发生异常时,异常报告器会将其捕捉并做相应处理,在spring.factories 文件里配置了默认的异常报告器,

准备上下文环境

实例化单例的beanName生成器

执行初始化方法

初始化方法有哪些呢?还记得第3步里面加载的初始化器嘛?其实是执行加载出来的所有初始化器,实现了ApplicationContextInitializer 接口的类

image.png

读取本地配置

image.png

不存在则去远程读nacos服务器的配置

调用http请求

解析配置