nacos自动更新属性值源码分析

本文深入探讨了Nacos配置中心如何实现实时更新属性值的机制。从@NacosValue注解的处理,到BeanPostProcessor的运用,详细解析了配置变更后如何通知并更新Spring容器中Bean的字段值,以及Nacos监听配置变化并采用事件驱动的方式完成自动更新的过程。
摘要由CSDN通过智能技术生成

一.概述

 nacos是阿里巴巴最新开源的配置管理和服务发现的一款中间件,这里主要针对配值中心的功能的部分进行分析。如果之前经常使用阿里技术栈的同学们应该不陌生,在更早的时间以前,阿里开源过一个叫diamond的分布式配置中心,实际上nacos在配置中心 的功能上基本和diamond相似,但nacos的生态更为丰富。后面会对比下两个的部分差异。

二.示例

 这里主要介绍内存实时更新的原理分析,示例就拿官网的好了

@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosConfiguration {}

@Controller
@RequestMapping("config")
public class ConfigController {

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

然后通过OPEN API或者调用SDK, 或者控制台的方式改变useLocalCache 的值,然后再次调用get对应的值,发现字段的值已经发生变化。

三.源码分析

由上面可以看出,在不重启应用的情况下,通过修改配置中心的配置项值,可以实现配置项的动态刷新,那么其原理是如何的呢?

我们一起来分析下;

在这个过程中,起重要作用的三个注解

1.@EnableNacosConfig

2.@NacosPropertySource

3.@NacosValue

这里插一句,实际上现在很多框架和中间件都借鉴了annotation-driven的思想,这里面也不例外,通过注解驱动,来配置对应的注解处理器来实现对应的需求

首先看第二个@NacosPropertySource,这个是指定了应用的配置坐标,groupId和dataId,这个使用过到diamond和nacos应该都熟悉,是指对应的配置组ID和数据ID

主要起动作的还是第一个,@EnableNacosConfig,这个,我们点开后,里面主要起作用的是Import(NacosConfigBeanDefinitionRegistrar.class),接着看 NacosConfigBeanDefinitionRegistrar,这个类继承了三个spring原生的接口,ImportBeanDefinitionRegistrar, EnvironmentAware, 和 BeanFactoryAware

其中ImportBeanDefinitionRegistrar 这个是Spring bean的注册器接口,用于bean的动态注入,而这里NacosConfigBeanDefinitionRegistrar就是用于处理nacos

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值