当前位置: 代码网 > it编程>编程语言>Java > Nacos(SpringBoot)配置加载及刷新方式

Nacos(SpringBoot)配置加载及刷新方式

2024年12月11日 Java 我要评论
nacos(springboot)配置加载及刷新pom文件<dependency> <groupid>com.alibaba.boot</group

nacos(springboot)配置加载及刷新

pom文件

<dependency>
            <groupid>com.alibaba.boot</groupid>
            <artifactid>nacos-config-spring-boot-starter</artifactid>
            <version>0.2.12</version>
        </dependency>

看看对应的meta-inf/spring.factories,这里我们主要研究nacosconfigautoconfiguration

如图,@enablenacosconfig 字面意思 开启nacos配置,我们看下这个注解

这里引入了nacosconfigbeandefinitionregistrar,这个关键了,我们看看它都注入了哪些bean

这里我们看看这个postprocessor

在registernacosconfigbeans中注入

然后invokenacospropertysourcepostprocessor调用

这里就是寻找nacospropertysources(@nacospropertysources或者@nacospropertysource的元属性)

首先调用addnacospropertysource添加到environment

接下来就是看看是否配置了自动刷新,如果是,则会添加一个监听器;

监听器做的就是替换environment中的旧值;

接下来我们看一下

com.alibaba.nacos.spring.context.event.config.eventpublishingconfigservice#addlistener

加入之前,做了个适配,然后再加入。

我们看看这个delegatingeventpublishinglistener做了什么

再收到配置信息时,首先调用了实际的监听器的监听方法去替换环境中的配置,然后发布了nacosconfigreceivedevent。接下来我们看看谁监听了这个事件,也是@nacosvalue能够刷新的原因所在

nacosvalueannotationbeanpostprocessor

先看看@nacosvalue是如何取值的

了解spring中bean的创建的都知道,属性注入是在populatebean()阶段,调用后置处理器的postprocesspropertyvalues()方法进行注入,nacosvalueannotationbeanpostprocessor继承了

com.alibaba.spring.beans.factory.annotation.abstractannotationbeanpostprocessor,这里记录了一个大致流程

org.springframework.beans.factory.annotation.injectionmetadata#inject--->

com.alibaba.spring.beans.factory.annotation.abstractannotationbeanpostprocessor.annotatedfieldelement#inject

com.alibaba.spring.beans.factory.annotation.abstractannotationbeanpostprocessor#getinjectedobject

dogetinjectedbean是个抽象方法,我们看一下nacosvalueannotationbeanpostprocessor的实现

可以看到,最终就是这样拿到了值,然后进行注入

接下来是值的自动刷新

说刷新之前,看一下下面这段代码,也就是处理了哪些值进行自动刷新

这里先后处理了字段和方法

经过上面的处理,将autorefreshed为true的目标加入到placeholdernacosvaluetargetmap中去。

前面我们提到,nacosvalueannotationbeanpostprocessor监听了nacosconfigreceivedevent

我们看一下它的实现

简单说呢,就是遍历上面的placeholdernacosvaluetargetmap进行一个值的更新。

总结

由上我们可知nacos在springboot环境下配置加载及刷新的大致过程

在平时使用时,如果要实现自动刷新,@nacospropertysource@nacosvalue两个注解的autorefresh属性必须同时为true,使用spring的注解@value可以注入,但无法实现自动刷新

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com