SpringCloud配置动态更新原理解析

2025-01-14 04:50

本文主要是介绍SpringCloud配置动态更新原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,...

一、SpringBoot、Cloud配置的读取

1、SpringBoot启动时会读取并解析配置文件中的配置到内存变量,保存在Environment对象的属性中。如果引入了配置中心如Nacos、ApChina编程ollo,其中的配置也会被SpringBoot读取并保存在Environwww.chinasem.cnment对象中。

SpringCloud配置动态更新原理解析

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

String name = environment.getProperty("name");

SpringCloud配置动态更新原理解析

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

SpringCloud配置动态更新原理解析

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

二、SpringCloud配置动态刷新

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

SpringCloud配置动态更新原理解析

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

SpringCloud配置动态更新原理解析

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

三、更新@RefreshScope注解Bean的属性值

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

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

SpringCloud配置动态更新原理解析

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

SpringCloud配置动态更新原理解析

SpringCloud配置动态更新原理解析

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

以上就是SpringCloud配置动态更新原理解析的详细内容,更多关于SpringCloud配置动态更新的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于SpringCloud配置动态更新原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153050

相关文章

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求