Nacos Spring ⽣态

目录

一、Nacos与Spring

二、项目简介

三、主要注解

1、@NacosValue 动态刷新配置

2、关注的 Bean 范围

3、动态刷新

4、@NacosPropertySource 动态获取配置 

微服务实战

 Spring家族及微服务系列文章 


一、Nacos与Spring

Nacos 无缝支持 Spring 全栈,将 Java 体验做到极致。Nacos 在开源之初就跟 Spring 生态做了
无缝整合,让用户注解驱动业务开发,并且跟底层实现解耦,提升研发效率。
Nacos Spring ⽣态_第1张图片

二、项目简介

    Nacos-spring-boot 项目 Nacos-spring 项目 是为 Spring 用户提供的项目,本质是提升 Java用户的编程体验和效率。其本质是通过⼀个开箱即用的框架,将 Nacos 客户端和 Spring-Boot 项目桥接起来(如下图中两个红框),使 SpringBoot 用户可以方便的在业务代码中引入 Nacos 服务端的配置(而不仅仅从 application.properties 中读取)。这样,便使得中间件团队和业务团队的开发任务充分解耦合。

Nacos Spring ⽣态_第2张图片

本文从代码实现入手,为大家剖析 Nacos-spring 系列项目的生态支持。Nacos-spring-boot 项目
的依赖关系为:

Nacos Spring ⽣态_第3张图片

Nacos Spring ⽣态_第4张图片

三、主要注解

为了实现 SpringBoot 和 Nacos-Client 的桥接,Nacos-spring 系列项目提供了丰富的注解语义。

1、@NacosValue 动态刷新配置

@NacosValue 这个注解是通过 NacosValueAnnotationBeanPostProcessor 类来处理的。

2、关注的 Bean 范围

Nacos Spring ⽣态_第5张图片

由上面两张图可以看出,NacosValueAnnotationBeanPostProcessor 实现了 AbstractAnnotationB eanPostProcessor,并且通过调用父类的构造方法,将其进行处理的 bean 的范围划在了所有打了 Value 标记的注解上。

3、动态刷新

每次 Nacos-client 端收到相应的 dataId 变更之后,都会触发 NacosConfigReceivedEvent;而下图中的这个方法则会接收到这个事件,并且计算出新的 evaluatedValue。
Nacos Spring ⽣态_第6张图片

计算出新的 evaluatedValue 之后,通过 setFiled 进行更新。

Nacos Spring ⽣态_第7张图片

整个动态刷新过程就是这样完成的。

4、@NacosPropertySource 动态获取配置 

Nacos 的 @NacosPropertySource 注解可以从 Nacos 服务端拉取相应的配置。@NacosPropertySource 注解主要是由下图中的 NacosPropertySourcePostProcessor 类来处理,该类实现了 BeanFactoryPostProcessor,作为⼀个钩子类,会在所有 spring bean 定义生成后、实例化之前调 用。

Nacos Spring ⽣态_第8张图片

在所有 spring bean 定义生成后、实例化之前,下图中的方法会被调用:他的使命是进行注解的扫描,扫描由 spring 所有的 bean,查看其类上是否有 @NacosPropertySource 注解,如果有的话, 则生成。

Nacos Spring ⽣态_第9张图片

Nacos Spring ⽣态_第10张图片

Nacos Spring ⽣态_第11张图片

从最后⼀张图中,可以看到在 receiveConfigInfo 的回调逻辑中,当有配置变更的时候,会重新生成 NacosPropertySource,并且替换掉 environment 中过时的 NacosPropertySource,完成这个步骤之后,就可以通过 environment.getProperty() 动态的获取到配置值了。但问题是,@Value 方式注入的 Bean 对象的配置项是无法动态刷新的,因为 Bean 已经生成无法再更改;为了实现动态的刷新,Nacos 又引入了 @NacosValue 注解。

微服务实战

✨【微服务】SpringCloud的OpenFeign与Ribbon配置

✨集Oauth2+Jwt实现单点登录

✨Spring Cloud Alibaba微服务第29章之Rancher

✨Spring Cloud Alibaba微服务第27章之Jenkins

✨Spring Cloud Alibaba微服务第24章之Docker部署

✨Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

✨Spring Cloud Alibaba微服务第22章之Oauth2

✨Spring Cloud Alibaba微服务第21章之分布式事务

✨Spring Cloud Alibaba微服务第18章之消息服务

✨Spring Cloud Alibaba微服务第16章之服务容错

✨Spring Cloud Alibaba微服务第14章之分库分表

✨Spring Cloud Alibaba微服务第11章之MyBatis-plus

✨Spring Cloud Alibaba微服务第8章之OpenFeign

✨Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

✨SpringCloud Alibaba微服务第6章之Gateway

✨SpringCloud Alibaba微服务第4章之Nacos

✨SpringCloud Alibaba微服务开篇

 Spring家族及微服务系列文章 

✨【Spring】一文带你吃透IOC容器技术

✨【微服务】SpringCloud中OpenFeign请求处理及负载均衡流程

✨【微服务】SpringCloud中Ribbon的WeightedResponseTimeRule策略

✨【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略

✨【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡

✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析

✨【微服务】SpringCloud微服务续约源码解析

✨【微服务】SpringCloud微服务注册源码解析

✨【微服务】Nacos2.x服务发现?RPC调用?重试机制?

✨【微服务】Nacos通知客户端服务变更以及重试机制

✨【微服务】Nacos服务发现源码分析

✨【微服务】SpringBoot监听器机制以及在Nacos中的应用

✨【微服务】Nacos服务端完成微服务注册以及健康检查流程

✨【微服务】Nacos客户端微服务注册原理流程

✨【微服务】SpringCloud中使用Ribbon实现负载均衡的原理

✨【微服务】SpringBoot启动流程注册FeignClient

✨【微服务】SpringBoot启动流程初始化OpenFeign的入口

✨Spring Bean的生命周期

✨Spring事务原理

✨SpringBoot自动装配原理机制及过程

✨SpringBoot获取处理器流程

✨SpringBoot中处理器映射关系注册流程

✨Spring5.x中Bean初始化流程

✨Spring中Bean定义的注册流程

✨Spring的处理器映射器与适配器的架构设计

✨SpringMVC执行流程图解及源码

你可能感兴趣的:(SpringCloud,java,spring,cloud)