@RefreshScope热更新原理

简介: 本文深入解析Spring Cloud中@RefreshScope注解实现配置热更新的原理。通过分析其组合注解特性,重点剖析@Scope("refresh")如何借助动态代理与缓存机制,在配置变更时触发Bean重建,结合Nacos实现配置自动刷新,从而达到无需重启应用即可生效的效果。

在前面学习Nacos的章节中,为了实现配置的热更新我们采取了两种方式,其一就是借助于注解:@RefreshScope,那么这个注解是如何做到标识即生效的?我们尝试一起分析一下。

1.了解@RefreshScope本身

点击进去此注解,可以发现其本质也是一个组合注解,如下 对于Spring注解有过研究的读者,对于这几个元注解一定不陌生,简短的篇幅了解一下:

@Target({ ElementType.TYPE, ElementType.METHOD })

目标的作用范围

ElementType.TYPE:能修饰类、接口或枚举类型

ElementType.FIELD:能修饰成员变量

ElementType.METHOD:能修饰方法

ElementType.PARAMETER:能修饰参数

ElementType.CONSTRUCTOR:能修饰构造器

ElementType.LOCAL_VARIABLE:能修饰局部变量

ElementType.ANNOTATION_TYPE:能修饰注解

ElementType.PACKAGE:能修饰包

@Retention(RetentionPolicy.RUNTIME)

保留的生命周期

SOURCE注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;即保留在.java文件中

CLASS注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;即保留在.class文件中

RUNTIME注解不仅被保存到class文件中,jvm加载class文件之后仍然存在;即保留在内存中的字节码文件中,一旦jvm加载就会更新,生命周期最长

@Scope("refresh")

实现配置、实例热加载的关键核心,默认了ScopedProxyMode.TARGET_CLASS; 属性,此属性的功能就是在创建一个代理,在每次调用的时候都用它来调用GenericScope get 方法来获取对象。集成了Spring框架之后,实际就是调用Spring的装配机制重新装配属性。

所以截止目前我们可以了解到:@RefreshScope注解本身是一个组合注解,其实现配置热更新的关键是依赖@Scope("refresh")。我们进一步来看看@RefreshScope到底做了什么?

2.@RefreshScope做了什么

@RefreshScope主要就是基于@Scope注解的作用域代理的基础上进行扩展实现的,加了@RefreshScope注解的类,在被Bean工厂创建后会加入自己的refresh scope 这个Bean缓存中,后续会优先从Bean缓存中获取,当配置中心发生了变更,会把变更的配置更新到spring容器的Environment中,并且同时bean缓存就会被清空,从而就会从bean工厂中创建bean实例了,而这次创建bean实例的时候就会继续经历这个bean的生命周期,使得@Value属性值能够从Environment中获取到最新的属性值,这样整个过程就达到了动态刷新配置的效果。

所以截止目前我们可以了解到下述大致流程:

3.@RefreshScope怎么做到的

基于上面我们知道,@Scope基于缓存失效,实现配置的热更新,我们继续看看它是如何做到的:

4.总结

对于@RefreshScope注解实现配置热更新的流程,实际是借助于缓存失效+Spring重新创建配置Bean解决,知道这个思路之后,读者们可以借助本章节2,或3做流程性、原理性了解。

相关文章
|
9天前
|
人工智能 开发框架 机器人
宝塔部署AstrBot及Napcat防踩坑教程
本教程详述了在宝塔面板11上,通过Docker容器部署AstrBot与Napcat,实现QQ机器人接入AI的全过程。内容涵盖环境搭建、关键配置(如容器网络互通、WebSocket连接及平台适配器设置)等。
宝塔部署AstrBot及Napcat防踩坑教程
|
9天前
|
SQL 监控 安全
常见网络攻击类型详解:从原理到防御
本文系统介绍8种常见网络攻击类型,包括恶意软件、网络钓鱼、中间人攻击、DDoS、SQL注入等,剖析其原理与防御策略,助力提升个人与企业网络安全防护能力。
|
16天前
|
机器学习/深度学习 人工智能 搜索推荐
构建AI智能体:七十一、模型评估指南:准确率、精确率、F1分数与ROC/AUC的深度解析
本文系统介绍了机器学习模型评估的核心指标与方法。首先阐述了混淆矩阵的构成(TP/FP/FN/TN),并基于此详细讲解了准确率、精确率、召回率和F1分数的计算原理和适用场景。特别指出准确率在不平衡数据中的局限性,强调精确率(减少误报)和召回率(减少漏报)的权衡关系。然后介绍了ROC曲线和AUC值的解读方法,说明如何通过调整分类阈值来优化模型性能。最后总结了不同业务场景下的指标选择策略:高精度场景侧重精确率,高召回场景关注召回率,平衡场景优选F1分数,不平衡数据则推荐使用AUC评估。
216 20
|
20天前
|
存储 人工智能 运维
阿里云 Tair 基于 3FS 工程化落地 KVCache:企业级部署、高可用运维与性能调优实践
阿里云 Tair KVCache 团队联合硬件团队对 3FS 进行深度优化,通过 RDMA 流量均衡、小 I/O 调优及全用户态落盘引擎,提升 4K 随机读 IOPS 150%;增强 GDR 零拷贝、多租户隔离与云原生运维能力,构建高性能、高可用、易管理的 KVCache 存储底座,助力 AI 大模型推理降本增效。
|
26天前
|
缓存 前端开发 JavaScript
Nginx性能优化
本课程深入讲解Nginx性能优化三大核心:动静分离、客户端缓存与Gzip压缩,涵盖反向代理配置、负载均衡实现及日志分析技巧,结合Shell命令与GoAccess工具进行实战统计,助力掌握企业级Web服务优化方案。
173 25
Nginx性能优化
|
2月前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
2036 43
|
1天前
|
机器学习/深度学习 人工智能 安全
构建AI智能体:八十六、大模型的指令微调与人类对齐:从知识渊博到善解人意
本文探讨了大模型从知识储备到实用助手的进化过程。首先分析了原始预训练模型存在的问题:擅长文本补全但缺乏指令理解能力,可能生成有害或无关内容。然后详细介绍了指令微调技术,通过高质量(指令-输出)数据集教会模型理解并执行翻译、总结、情感分析等任务。进一步阐述了人类对齐技术,包括基于人类反馈的强化学习(RLHF)的三个关键步骤,使模型输出不仅符合指令,更符合人类价值观。最后展示了Qwen模型微调实践,包括代码实现和效果对比。整个过程将AI从知识库转变为既强大又安全可靠的智能助手。
67 18
|
7天前
|
机器学习/深度学习 人工智能 算法
技术人视角:传统产品经理如何系统性转型AI产品经理
AI时代重塑产品格局,AI产品经理需兼具技术理解、业务洞察与用户体验。本文系统梳理从认知升级到实战落地的转型路径,助力传统PM或技术人掌握AI产品方法论,避开常见误区,逐步成长为驾驭智能的“系统架构师”。
193 12
|
15天前
|
人工智能 运维 安全
GPT-5.2 Codex来了:能独立跑7+小时的AI程序员,老金手把手教你玩转
OpenAI发布GPT-5.2 Codex,支持异步自主编程,7小时持续任务不断线。采用上下文压缩技术,胜任复杂重构与安全审计。对比Claude Code的同步交互,Codex更像远程员工,适合甩手任务。Plus用户可免费体验,API性价比高,配合本地工具高效开发。
GPT-5.2 Codex来了:能独立跑7+小时的AI程序员,老金手把手教你玩转
|
11天前
|
算法 开发工具 git
Git基础
本文介绍了Git的四大工作区域:工作区、暂存区、版本库和远程仓库,详解文件在各区域间的流转过程及四种状态(未跟踪、未修改、已修改、已暂存)。涵盖常用命令如init、add、commit、push、pull等,帮助理解Git版本控制的核心流程与操作要点。
69 15