当前位置: 代码网 > it编程>编程语言>Java > SpringCloud配置动态更新原理解析

SpringCloud配置动态更新原理解析

2025年01月14日 Java 我要评论
一、springboot、cloud配置的读取1、springboot启动时会读取并解析配置文件中的配置到内存变量,保存在environment对象的属性中。如果引入了配置中心如nacos、apoll

一、springboot、cloud配置的读取

1、springboot启动时会读取并解析配置文件中的配置到内存变量,保存在environment对象的属性中。如果引入了配置中心如nacos、apollo,其中的配置也会被springboot读取并保存在environment对象中。

2、可以使用编码的方式获取配置数据:

string name = environment.getproperty("name");

3、可以使用@value注解直接把配置赋值给bean的属性:

这里的name变量值直接来自于environment对象。

二、springcloud配置动态刷新

1、springboot配置文件和springcloud配置中心中的配置,区别只是来源不同,都是被读取加载到environment对象中生效的:

2、当配置中心修改了配置并发布时,server端会向client端发送配置变化通知,client端重新拉取配置并更新environment对象中的配置数据(通常通过事件发布和监听机制来实现)

此时如果使用编码方式从environment对象中获取配置(而不是@value注解的属性),则已经是更新后的值。

三、更新@refreshscope注解bean的属性值

1、对于使用@value注解获取配置的属性,不会随配置数据的更新而更新,因为bean对象已经创建完成,配置变化时只是更新environment中的数据,并没有更新bean属性值的动作发生。

2、但是如果bean上有@refreshscope注解,则其中的@value属性值会随配置更新而更新。

原理:使用@refreshscope标记的bean,spring会为其创建代理对象,代理对象中持有原生对象,@value的属性值位于原生对象中。springboot中的配置中心客户端在收到服务端的变更通知后,会先后发布两个事件:1、触发environment重新加载相关配置数据。2、触发所有@refreshscope的bean置为null,则在这些bean下次使用时重新创建,重新从environment中获取配置,即实现@value属性值的更新。

注:从springcloud配置动态更新的原理可知,诸如数据库连接配置,在配置中心修改了配置后只是会更新@refreshscope注解bean中的@value属性,如果要动态修改数据库信息,则还需要重建datasource对象、清除旧连接等操作。

以上就是springcloud配置动态更新原理解析的详细内容,更多关于springcloud配置动态更新的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

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