网易首页 > 网易号 > 正文 申请入驻

SpringBoot + @RefreshScope:动态刷新配置的终极指南

0
分享至

Java精选面试题(微信小程序):5000+道面试题和选择题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!

无需重启服务,实时更新配置! 本文将深入探索Spring Boot中@RefreshScope

的神奇力量,让你的应用配置在运行时动态刷新,彻底告别服务重启的烦恼。

一、为什么需要动态刷新配置?

在传统Java应用中,修改配置文件后必须重启服务才能生效,这会导致:

  • 服务中断:重启期间服务不可用;

  • 状态丢失:内存中的临时数据被清空;

  • 运维复杂:需要复杂的发布流程;

Spring Boot的@RefreshScope完美解决了这些问题,实现配置热更新,让应用像乐高积木一样灵活重组!

二、@RefreshScope核心原理1. 工作原理图解

graph TD
A[修改配置文件] --> B[发送POST刷新请求]
B --> C[/actuator/refresh 端点]
C --> D[RefreshScope 刷新机制]
D --> E[销毁旧Bean并创建新Bean]
E --> F[新配置立即生效]
2. 关键技术解析
  • 作用域代理:为Bean创建动态代理,拦截方法调用

  • 配置绑定:当配置更新时,重新绑定@Value注解的值

  • Bean生命周期管理:销毁并重新初始化被@RefreshScope标记的Bean

三、完整实现步骤步骤1:添加必要依赖

 


org.springframework.boot groupId>
spring-boot-starter-web artifactId>
dependency>

org.springframework.boot groupId>
spring-boot-starter-actuator artifactId>
dependency>

org.springframework.cloud groupId>
spring-cloud-starter artifactId>
3.1.3 version>
dependency>
dependencies>
步骤2:启用刷新机制

// 主应用类
@SpringBootApplication
@EnableRefreshScope // 关键注解:开启配置刷新能力
publicclassDynamicConfigApp {
publicstaticvoidmain(String[] args) {
SpringApplication.run(DynamicConfigApp.class, args);
}
}
步骤3:配置application.yml

# 应用基础配置
app:
feature:
enabled:true
timeout:5000
retry-count:3
welcome-msg:"Hello, Dynamic Config!"


# 暴露刷新端点(关键!)
management:
endpoints:
web:
exposure:
include:refresh,health,info
步骤4:创建动态配置Bean

@Service
@RefreshScope// 标记此Bean支持动态刷新
publicclassFeatureService {
// 注入可刷新的配置项
@Value("${app.feature.enabled}")
privateboolean featureEnabled;
@Value("${app.feature.timeout}")
privateint timeout;
@Value("${app.feature.retry-count}")
privateint retryCount;
@Value("${app.feature.welcome-msg}")
private String welcomeMessage;


public String getFeatureConfig() {
return String.format("""
Feature Enabled: %s
Timeout: %d ms
Retry Count: %d
Message: %s
""", featureEnabled, timeout, retryCount, welcomeMessage);
}
}
步骤5:创建测试控制器

@RestController
@RequestMapping("/config")
publicclassConfigController {

privatefinal FeatureService featureService;

// 构造函数注入
publicConfigController(FeatureService featureService) {
this.featureService = featureService;
}

@GetMapping
public String getConfig() {
return featureService.getFeatureConfig();
}
}
步骤6:触发配置刷新

修改application.yml后,发送刷新请求:

curl -X POST http://localhost:8080/actuator/refresh

响应示例(返回被修改的配置项):

["app.feature.timeout", "app.feature.welcome-msg"]
四、深入理解@RefreshScope1. 作用域代理原理

// 伪代码:Spring如何实现动态刷新
publicclassRefreshScopeProxyimplementsApplicationContextAware {
private Object targetBean;
@Override
public Object invoke(Method method) {
if (configChanged) {
// 1. 销毁旧Bean
context.destroyBean(targetBean);
// 2. 重新创建Bean
targetBean = context.getBean(beanName);
}
return method.invoke(targetBean, args);
}
}
2. 刷新范围控制技巧

场景1:只刷新特定Bean的部分属性

@Component
@RefreshScope
publicclassPaymentService {
// 只有带@Value的属性会刷新
@Value("${payment.timeout}")
privateint timeout;
// 不会被刷新的属性
privatefinalStringapiVersion="v1.0";
}

场景2:组合配置类刷新

@Configuration
@RefreshScope// 整个配置类可刷新
publicclassAppConfig {
@Bean
@RefreshScope
public FeatureService featureService() {
returnnewFeatureService();
}
@Value("${app.theme}")
private String theme;
}
五、生产环境最佳实践1. 安全加固配置

management:
endpoint:
refresh:
enabled:true
endpoints:
web:
exposure:
include:refresh
base-path:/internal# 修改默认路径
path-mapping:
refresh:secure-refresh# 端点重命名


# 添加安全认证
spring:
security:
user:
name:admin
password:$2a$10$NVM0n8ElaRgg7zWO1CxUdei7vWoQP91oGycgVNCY8GQEx.TGx.AaC
2. 自动刷新方案

方案1:Git Webhook自动刷新


方案2:配置中心联动(Nacos示例)

// bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
auto-refresh: true # 开启自动刷新
六、常见问题排查问题1:刷新后配置未生效

解决方案:

  • • 检查是否添加@RefreshScope

  • • 确认刷新端点返回了修改的配置项

  • • 查看日志:logging.level.org.springframework.cloud=DEBUG

问题2:多实例刷新不同步

解决方案:

# 使用Spring Cloud Bus同步刷新
curl -X POST http://host:port/actuator/bus-refresh
问题3:配置更新导致内存泄漏

预防措施:

@PreDestroy
public void cleanUp() {
// 清理资源
}
七、扩展应用场景

动态功能开关:实时开启/关闭功能模块

# 修改后立即生效
feature.new-checkout.enabled=true

运行时日志级别调整

@RefreshScope
public class LogConfig {
@Value("${logging.level.root}")
private String logLevel;
// 动态应用新日志级别
}

数据库连接池调优

# 动态修改连接池配置
spring.datasource.hikari.maximum-pool-size=20
结语:拥抱动态配置新时代

通过@RefreshScope,我们实现了:

  • ✅ 零停机配置更新

  • ✅ 即时生效的应用参数

  • ✅ 更灵活的运维体验

  • ✅ 资源利用最大化

最佳实践建议:

  • 敏感配置(如密码)避免使用动态刷新

  • 配合配置中心(Nacos/Config Server)使用

  • 生产环境务必保护刷新端点

技术的本质是让复杂变简单。掌握动态配置刷新,让你的应用在云原生时代如虎添翼!

来源:https://blog.csdn.net/renfusheng1993

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者或者摸鱼交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
【2025.11.8】扒酱料不停:那些你不知道的八卦一二三

【2025.11.8】扒酱料不停:那些你不知道的八卦一二三

娱乐真爆姐
2025-11-08 23:08:13
浙江28分完败广东!丁伟无奈苦笑:他们是拿前两场比赛来热身了

浙江28分完败广东!丁伟无奈苦笑:他们是拿前两场比赛来热身了

狼叔评论
2025-11-08 22:18:04
迟迟不给中国道歉后,高市政府发出战争威胁,中方用8字宣告结局

迟迟不给中国道歉后,高市政府发出战争威胁,中方用8字宣告结局

时时有聊
2025-11-07 20:38:57
湖南省人医17分视频风波,女方肤白貌美、男方儒雅绅士,均被停职

湖南省人医17分视频风波,女方肤白貌美、男方儒雅绅士,均被停职

鋭娱之乐
2025-11-07 08:39:22
广州市一栋价值5015万的独栋别墅降价拍卖,被人2808.78万竞得

广州市一栋价值5015万的独栋别墅降价拍卖,被人2808.78万竞得

天天话事
2025-11-07 20:36:30
全运会乒乓球!8强名单出炉,蒯曼首秀大胜,孙颖莎对手+赛程出炉

全运会乒乓球!8强名单出炉,蒯曼首秀大胜,孙颖莎对手+赛程出炉

知轩体育
2025-11-09 00:24:44
特斯拉,最新发布!售价28.85万元起

特斯拉,最新发布!售价28.85万元起

中国基金报
2025-11-08 11:32:04
毛主席对尼泊尔首相说:你想把珠峰全部划归贵国?还有更好的办法

毛主席对尼泊尔首相说:你想把珠峰全部划归贵国?还有更好的办法

鹤羽说个事
2025-10-30 15:53:46
”经济学家吴晓求教授说:“老百姓都没收入了,还在刺激消费!这种做法是错误的!

”经济学家吴晓求教授说:“老百姓都没收入了,还在刺激消费!这种做法是错误的!

张晓磊
2025-11-07 11:34:05
人体钢针破水!全红婵16秒视频引爆全网,407C被世界泳联立标杆

人体钢针破水!全红婵16秒视频引爆全网,407C被世界泳联立标杆

体育见习官
2025-11-08 16:24:26
《繁花》剧组最新发声:古二发布的录音存在大量失实、蓄意剪辑和恶意解读

《繁花》剧组最新发声:古二发布的录音存在大量失实、蓄意剪辑和恶意解读

上观新闻
2025-11-08 19:59:06
这是吴石将军牺牲时的真实照片,绳子绕颈,害怕他临刑时大喊口号

这是吴石将军牺牲时的真实照片,绳子绕颈,害怕他临刑时大喊口号

大国纪录
2025-10-30 09:56:59
提醒邻居扔垃圾被打后续:被行拘5日,当事人再发声,将行政复议

提醒邻居扔垃圾被打后续:被行拘5日,当事人再发声,将行政复议

通鉴史智
2025-11-08 07:36:16
小红书上女性向避孕套火了,有人1个月狂揽300+万,增长20倍

小红书上女性向避孕套火了,有人1个月狂揽300+万,增长20倍

运营研究社
2025-11-07 14:05:57
超级工程开工!省委书记、省长赴现场

超级工程开工!省委书记、省长赴现场

上观新闻
2025-11-08 16:29:07
湖南医生17分钟不雅视频上热搜,医术好私德有问题,是否能被原谅

湖南医生17分钟不雅视频上热搜,医术好私德有问题,是否能被原谅

江山挥笔
2025-11-06 11:44:13
说倒就倒!陕西前首富也撑不住了,千亿巨头一夜崩塌

说倒就倒!陕西前首富也撑不住了,千亿巨头一夜崩塌

阿器谈史
2025-11-08 17:59:48
同班同学,2022赛季从中冠冲乙的四支球队已有三支冲超

同班同学,2022赛季从中冠冲乙的四支球队已有三支冲超

懂球帝
2025-11-08 17:20:51
为啥男人宁愿付出巨大代价也要离婚?网友:因为命比钱重要,自由

为啥男人宁愿付出巨大代价也要离婚?网友:因为命比钱重要,自由

带你感受人间冷暖
2025-11-06 16:27:51
人类幼崽的理解能力有多绝?网友:完全不走寻常路,只有出乎意料

人类幼崽的理解能力有多绝?网友:完全不走寻常路,只有出乎意料

夜深爱杂谈
2025-11-08 22:18:59
2025-11-09 01:08:49
Java精选
Java精选
一场永远也演不完的戏
1754文章数 3859关注度
往期回顾 全部

科技要闻

美股“AI八巨头”单周市值损失8000亿美元

头条要闻

张家界荒野求生选手抓到野猪吃得满嘴流油 赛事方回应

头条要闻

张家界荒野求生选手抓到野猪吃得满嘴流油 赛事方回应

体育要闻

马刺绞赢火箭,不靠文班亚马?

娱乐要闻

古二再度放料!秦雯王家卫吐槽出现新人物

财经要闻

小马、文远回港上市 但自动驾驶还没赢家

汽车要闻

特斯拉Model Y后驱长续航版上线:28.85 万元

态度原创

家居
教育
本地
时尚
军事航空

家居要闻

现代自由 功能美学居所

教育要闻

高分作文的核心,是“真情实感”!

本地新闻

这届干饭人,已经把博物馆吃成了食堂

五十多岁的女性秋季别瞎打扮,这3个技巧实用还时髦,快收藏

军事要闻

福建舰常驻地为三亚军港

无障碍浏览 进入关怀版