一、Nacos与Spring
Nacos 无缝支持 Spring 全栈,将 Java 体验做到极致。Nacos 在开源之初就跟 Spring 生态做了
无缝整合,让用户注解驱动业务开发,并且跟底层实现解耦,提升研发效率。
二、项目简介
Nacos-spring-boot 项目和 Nacos-spring 项目是为 Spring 用户提供的项目,本质是提升 Java用户的编程体验和效率。其本质是通过⼀个开箱即用的框架,将 Nacos 客户端和 Spring-Boot 项目桥接起来(如下图中两个红框),使 SpringBoot 用户可以方便的在业务代码中引入 Nacos 服务端的配置(而不仅仅从 application.properties 中读取)。这样,便使得中间件团队和业务团队的开发任务充分解耦合。
本文从代码实现入手,为大家剖析 Nacos-spring 系列项目的生态支持。Nacos-spring-boot 项目
的依赖关系为:
三、主要注解
为了实现 SpringBoot 和 Nacos-Client 的桥接,Nacos-spring 系列项目提供了丰富的注解语义。
1、@NacosValue 动态刷新配置
@NacosValue 这个注解是通过 NacosValueAnnotationBeanPostProcessor 类来处理的。
2、关注的 Bean 范围
由上面两张图可以看出,NacosValueAnnotationBeanPostProcessor 实现了 AbstractAnnotationB eanPostProcessor,并且通过调用父类的构造方法,将其进行处理的 bean 的范围划在了所有打了 Value 标记的注解上。
3、动态刷新
每次 Nacos-client 端收到相应的 dataId 变更之后,都会触发 NacosConfigReceivedEvent;而下图中的这个方法则会接收到这个事件,并且计算出新的 evaluatedValue。
计算出新的 evaluatedValue 之后,通过 setFiled 进行更新。
整个动态刷新过程就是这样完成的。
4、@NacosPropertySource 动态获取配置
Nacos 的 @NacosPropertySource 注解可以从 Nacos 服务端拉取相应的配置。@NacosPropertySource 注解主要是由下图中的 NacosPropertySourcePostProcessor 类来处理,该类实现了 BeanFactoryPostProcessor,作为⼀个钩子类,会在所有 spring bean 定义生成后、实例化之前调 用。
在所有 spring bean 定义生成后、实例化之前,下图中的方法会被调用:他的使命是进行注解的扫描,扫描由 spring 所有的 bean,查看其类上是否有 @NacosPropertySource 注解,如果有的话, 则生成。
从最后⼀张图中,可以看到在 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执行流程图解及源码
版权归原作者 卡布奇诺-海晨 所有, 如有侵权,请联系我们删除。