国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

SpringBoot + @RefreshScope:動(dòng)態(tài)刷新配置的終極指南

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時(shí)刷題!

無需重啟服務(wù),實(shí)時(shí)更新配置! 本文將深入探索Spring Boot中@RefreshScope

的神奇力量,讓你的應(yīng)用配置在運(yùn)行時(shí)動(dòng)態(tài)刷新,徹底告別服務(wù)重啟的煩惱。

一、為什么需要?jiǎng)討B(tài)刷新配置?

在傳統(tǒng)Java應(yīng)用中,修改配置文件后必須重啟服務(wù)才能生效,這會(huì)導(dǎo)致:

  • 服務(wù)中斷:重啟期間服務(wù)不可用;

  • 狀態(tài)丟失:內(nèi)存中的臨時(shí)數(shù)據(jù)被清空;

  • 運(yùn)維復(fù)雜:需要復(fù)雜的發(fā)布流程;

Spring Boot的@RefreshScope完美解決了這些問題,實(shí)現(xiàn)配置熱更新,讓應(yīng)用像樂高積木一樣靈活重組!

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

graph TD
A[修改配置文件] --> B[發(fā)送POST刷新請(qǐng)求]
B --> C[/actuator/refresh 端點(diǎn)]
C --> D[RefreshScope 刷新機(jī)制]
D --> E[銷毀舊Bean并創(chuàng)建新Bean]
E --> F[新配置立即生效]
2. 關(guān)鍵技術(shù)解析
  • ?作用域代理:為Bean創(chuàng)建動(dòng)態(tài)代理,攔截方法調(diào)用

  • ?配置綁定:當(dāng)配置更新時(shí),重新綁定@Value注解的值

  • ?Bean生命周期管理:銷毀并重新初始化被@RefreshScope標(biāo)記的Bean

三、完整實(shí)現(xiàn)步驟步驟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:?jiǎn)⒂盟⑿聶C(jī)制

// 主應(yīng)用類
@SpringBootApplication
@EnableRefreshScope // 關(guān)鍵注解:開啟配置刷新能力
publicclassDynamicConfigApp {
publicstaticvoidmain(String[] args) {
SpringApplication.run(DynamicConfigApp.class, args);
}
}
步驟3:配置application.yml

# 應(yīng)用基礎(chǔ)配置
app:
feature:
enabled:true
timeout:5000
retry-count:3
welcome-msg:"Hello, Dynamic Config!"


# 暴露刷新端點(diǎn)(關(guān)鍵。
management:
endpoints:
web:
exposure:
include:refresh,health,info
步驟4:創(chuàng)建動(dòng)態(tài)配置Bean

@Service
@RefreshScope// 標(biāo)記此Bean支持動(dòng)態(tài)刷新
publicclassFeatureService {
// 注入可刷新的配置項(xiàng)
@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:創(chuàng)建測(cè)試控制器

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

privatefinal FeatureService featureService;

// 構(gòu)造函數(shù)注入
publicConfigController(FeatureService featureService) {
this.featureService = featureService;
}

@GetMapping
public String getConfig() {
return featureService.getFeatureConfig();
}
}
步驟6:觸發(fā)配置刷新

修改application.yml后,發(fā)送刷新請(qǐng)求:

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

響應(yīng)示例(返回被修改的配置項(xiàng)):

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

// 偽代碼:Spring如何實(shí)現(xiàn)動(dòng)態(tài)刷新
publicclassRefreshScopeProxyimplementsApplicationContextAware {
private Object targetBean;
@Override
public Object invoke(Method method) {
if (configChanged) {
// 1. 銷毀舊Bean
context.destroyBean(targetBean);
// 2. 重新創(chuàng)建Bean
targetBean = context.getBean(beanName);
}
return method.invoke(targetBean, args);
}
}
2. 刷新范圍控制技巧

場(chǎng)景1:只刷新特定Bean的部分屬性

@Component
@RefreshScope
publicclassPaymentService {
// 只有帶@Value的屬性會(huì)刷新
@Value("${payment.timeout}")
privateint timeout;
// 不會(huì)被刷新的屬性
privatefinalStringapiVersion="v1.0";
}

場(chǎng)景2:組合配置類刷新

@Configuration
@RefreshScope// 整個(gè)配置類可刷新
publicclassAppConfig {
@Bean
@RefreshScope
public FeatureService featureService() {
returnnewFeatureService();
}
@Value("${app.theme}")
private String theme;
}
五、生產(chǎn)環(huán)境最佳實(shí)踐1. 安全加固配置

management:
endpoint:
refresh:
enabled:true
endpoints:
web:
exposure:
include:refresh
base-path:/internal# 修改默認(rèn)路徑
path-mapping:
refresh:secure-refresh# 端點(diǎn)重命名


# 添加安全認(rèn)證
spring:
security:
user:
name:admin
password:$2a$10$NVM0n8ElaRgg7zWO1CxUdei7vWoQP91oGycgVNCY8GQEx.TGx.AaC
2. 自動(dòng)刷新方案

方案1:Git Webhook自動(dòng)刷新


方案2:配置中心聯(lián)動(dòng)(Nacos示例)

// bootstrap.yml
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
auto-refresh: true # 開啟自動(dòng)刷新
六、常見問題排查問題1:刷新后配置未生效

解決方案:

  • ? 檢查是否添加@RefreshScope

  • ? 確認(rèn)刷新端點(diǎn)返回了修改的配置項(xiàng)

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

問題2:多實(shí)例刷新不同步

解決方案:

# 使用Spring Cloud Bus同步刷新
curl -X POST http://host:port/actuator/bus-refresh
問題3:配置更新導(dǎo)致內(nèi)存泄漏

預(yù)防措施:

@PreDestroy
public void cleanUp() {
// 清理資源
}
七、擴(kuò)展應(yīng)用場(chǎng)景

動(dòng)態(tài)功能開關(guān):實(shí)時(shí)開啟/關(guān)閉功能模塊

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

運(yùn)行時(shí)日志級(jí)別調(diào)整

@RefreshScope
public class LogConfig {
@Value("${logging.level.root}")
private String logLevel;
// 動(dòng)態(tài)應(yīng)用新日志級(jí)別
}

數(shù)據(jù)庫(kù)連接池調(diào)優(yōu)

# 動(dòng)態(tài)修改連接池配置
spring.datasource.hikari.maximum-pool-size=20
結(jié)語(yǔ):擁抱動(dòng)態(tài)配置新時(shí)代

通過@RefreshScope,我們實(shí)現(xiàn)了:

  • ? 零停機(jī)配置更新

  • ? 即時(shí)生效的應(yīng)用參數(shù)

  • ? 更靈活的運(yùn)維體驗(yàn)

  • ? 資源利用最大化

最佳實(shí)踐建議:

  • 敏感配置(如密碼)避免使用動(dòng)態(tài)刷新

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

  • 生產(chǎn)環(huán)境務(wù)必保護(hù)刷新端點(diǎn)

技術(shù)的本質(zhì)是讓復(fù)雜變簡(jiǎn)單。掌握動(dòng)態(tài)配置刷新,讓你的應(yīng)用在云原生時(shí)代如虎添翼!

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

公眾號(hào)“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請(qǐng)聯(lián)系,筆者會(huì)第一時(shí)間刪除處理!

最近有很多人問,有沒有讀者或者摸魚交流群!加入方式很簡(jiǎn)單,公眾號(hào)Java精選,回復(fù)“加群”,即可入群!

文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

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.

相關(guān)推薦
熱點(diǎn)推薦
美國(guó)吃華人絕戶財(cái)富已經(jīng)成為一個(gè)公開的密碼了!

美國(guó)吃華人絕戶財(cái)富已經(jīng)成為一個(gè)公開的密碼了!

達(dá)文西看世界
2026-01-24 15:32:33
中國(guó)金花距離澳網(wǎng)決賽一步之遙,女單冠軍爭(zhēng)奪戰(zhàn)逐漸明朗

中國(guó)金花距離澳網(wǎng)決賽一步之遙,女單冠軍爭(zhēng)奪戰(zhàn)逐漸明朗

體育豐蘊(yùn)
2026-01-29 16:08:58
國(guó)產(chǎn)固態(tài)電池量產(chǎn)加速!數(shù)千萬新能源車主,恐成最大“接盤俠”?

國(guó)產(chǎn)固態(tài)電池量產(chǎn)加速!數(shù)千萬新能源車主,恐成最大“接盤俠”?

胖福的小木屋
2026-01-28 10:43:40
剖人心者終被食:亂世惡棍張彥澤的結(jié)局比電視上還慘

剖人心者終被食:亂世惡棍張彥澤的結(jié)局比電視上還慘

愛歷史
2026-01-28 10:07:37
價(jià)格大跳水!主力車型直降超15萬,中年男人的夢(mèng)中豪車撐不住了?

價(jià)格大跳水!主力車型直降超15萬,中年男人的夢(mèng)中豪車撐不住了?

財(cái)經(jīng)八卦
2026-01-28 20:05:03
女子用剁椒魚頭試探“網(wǎng)戀男友”,仍被騙68萬

女子用剁椒魚頭試探“網(wǎng)戀男友”,仍被騙68萬

中國(guó)日?qǐng)?bào)
2026-01-29 12:00:59
編程門檻被壓到799美元?“那個(gè)拿著Mac Mini+Claude的「門外漢」,搶走了程序員3個(gè)月的活!”

編程門檻被壓到799美元?“那個(gè)拿著Mac Mini+Claude的「門外漢」,搶走了程序員3個(gè)月的活!”

CSDN
2026-01-27 18:10:04
阿富汗塔利班恢復(fù)奴隸制?

阿富汗塔利班恢復(fù)奴隸制?

孫曉宇
2026-01-28 14:18:17
貝森特再點(diǎn)卡尼:你這種人我見得多了,別搞事

貝森特再點(diǎn)卡尼:你這種人我見得多了,別搞事

觀察者網(wǎng)
2026-01-29 08:51:38
周總理逝世21年后,中國(guó)銀行核查賬目時(shí)發(fā)現(xiàn)他名下存有巨額存款,一番調(diào)查后揭開了背后的真相

周總理逝世21年后,中國(guó)銀行核查賬目時(shí)發(fā)現(xiàn)他名下存有巨額存款,一番調(diào)查后揭開了背后的真相

寄史言志
2026-01-17 16:37:15
無法復(fù)制的價(jià)值!95年喬丹第一次復(fù)出有多轟動(dòng)?魔術(shù)師曾為他下跪

無法復(fù)制的價(jià)值!95年喬丹第一次復(fù)出有多轟動(dòng)?魔術(shù)師曾為他下跪

禾三千體育
2026-01-29 16:42:32
要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

墨蘭史書
2026-01-28 20:45:03
偉大的2-0!中國(guó)金花直通澳網(wǎng)決賽:解鎖2大成就,爭(zhēng)冠對(duì)手確定!

偉大的2-0!中國(guó)金花直通澳網(wǎng)決賽:解鎖2大成就,爭(zhēng)冠對(duì)手確定!

劉姚堯的文字城堡
2026-01-29 16:33:24
本期禁足名單分布:31名球員、6名教練、17名足協(xié)官員、1名裁判

本期禁足名單分布:31名球員、6名教練、17名足協(xié)官員、1名裁判

慢歌輕步謠
2026-01-29 14:03:07
陳永貴夫人宋玉林離世,葬禮之上郭鳳蓮致悼詞,現(xiàn)場(chǎng)人山人海滿是悲戚

陳永貴夫人宋玉林離世,葬禮之上郭鳳蓮致悼詞,現(xiàn)場(chǎng)人山人海滿是悲戚

文史明鑒
2026-01-22 17:37:12
金價(jià)創(chuàng)新高!黃金變現(xiàn)業(yè)務(wù)爆了

金價(jià)創(chuàng)新高!黃金變現(xiàn)業(yè)務(wù)爆了

環(huán)球網(wǎng)資訊
2026-01-29 11:28:09
能否逆轉(zhuǎn)銷量?曝特斯拉即將推出Model YL+,88度電池,續(xù)航800km

能否逆轉(zhuǎn)銷量?曝特斯拉即將推出Model YL+,88度電池,續(xù)航800km

凡兮說
2026-01-29 16:44:36
大S雕像揭幕儀式即將開啟,出席人員曝光!汪小菲有望上金寶山!

大S雕像揭幕儀式即將開啟,出席人員曝光!汪小菲有望上金寶山!

娛樂團(tuán)長(zhǎng)
2026-01-29 12:26:42
再打下去,烏克蘭沒男人了!澤連斯基解禁,允許年輕男性出國(guó)避難

再打下去,烏克蘭沒男人了!澤連斯基解禁,允許年輕男性出國(guó)避難

史智文道
2026-01-29 16:22:57
阿森納全勝領(lǐng)銜 英超隊(duì)踢歐冠怎么就如此輕松?

阿森納全勝領(lǐng)銜 英超隊(duì)踢歐冠怎么就如此輕松?

體壇周報(bào)
2026-01-29 16:16:23
2026-01-29 17:23:00
Java精選
Java精選
一場(chǎng)永遠(yuǎn)也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國(guó)內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂要聞

張譯不再隱瞞!公開回應(yīng)退圈息影真相

財(cái)經(jīng)要聞

崔東樹:中國(guó)汽車未來年銷或達(dá)5000萬輛

汽車要聞

車長(zhǎng)超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

本地
時(shí)尚
教育
健康
公開課

本地新聞

云游中國(guó)|撥開云霧,巫山每幀都是航拍大片

冬天大衣怎么穿才更好看?選好顏色、找對(duì)單品,高級(jí)簡(jiǎn)約又大氣

教育要聞

“國(guó)家課程落地吳江行動(dòng)叢書”發(fā)布!聚焦課改前沿,共探育人新路!

耳石癥分類型,癥狀大不同

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進(jìn)入關(guān)懷版