SpringCloud配置動態(tài)更新原理解析
一、SpringBoot、Cloud配置的讀取
1、SpringBoot啟動時會讀取并解析配置文件中的配置到內(nèi)存變量,保存在Environment對象的屬性中。如果引入了配置中心如Nacos、Apollo,其中的配置也會被SpringBoot讀取并保存在Environment對象中。

2、可以使用編碼的方式獲取配置數(shù)據(jù):
String name = environment.getProperty("name");
3、可以使用@Value注解直接把配置賦值給Bean的屬性:

這里的name變量值直接來自于Environment對象。
二、SpringCloud配置動態(tài)刷新
1、SpringBoot配置文件和SpringCloud配置中心中的配置,區(qū)別只是來源不同,都是被讀取加載到Environment對象中生效的:

2、當(dāng)配置中心修改了配置并發(fā)布時,Server端會向Client端發(fā)送配置變化通知,Client端重新拉取配置并更新Environment對象中的配置數(shù)據(jù)(通常通過事件發(fā)布和監(jiān)聽機(jī)制來實現(xiàn))

此時如果使用編碼方式從Environment對象中獲取配置(而不是@Value注解的屬性),則已經(jīng)是更新后的值。
三、更新@RefreshScope注解Bean的屬性值
1、對于使用@Value注解獲取配置的屬性,不會隨配置數(shù)據(jù)的更新而更新,因為Bean對象已經(jīng)創(chuàng)建完成,配置變化時只是更新Environment中的數(shù)據(jù),并沒有更新Bean屬性值的動作發(fā)生。
2、但是如果Bean上有@RefreshScope注解,則其中的@Value屬性值會隨配置更新而更新。

原理:使用@RefreshScope標(biāo)記的Bean,Spring會為其創(chuàng)建代理對象,代理對象中持有原生對象,@Value的屬性值位于原生對象中。SpringBoot中的配置中心客戶端在收到服務(wù)端的變更通知后,會先后發(fā)布兩個事件:1、觸發(fā)Environment重新加載相關(guān)配置數(shù)據(jù)。2、觸發(fā)所有@RefreshScope的Bean置為null,則在這些Bean下次使用時重新創(chuàng)建,重新從Environment中獲取配置,即實現(xiàn)@Value屬性值的更新。


注:從SpringCloud配置動態(tài)更新的原理可知,諸如數(shù)據(jù)庫連接配置,在配置中心修改了配置后只是會更新@RefreshScope注解Bean中的@Value屬性,如果要動態(tài)修改數(shù)據(jù)庫信息,則還需要重建DataSource對象、清除舊連接等操作。
以上就是SpringCloud配置動態(tài)更新原理解析的詳細(xì)內(nèi)容,更多關(guān)于SpringCloud配置動態(tài)更新的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis分頁插件PageHelper手寫實現(xiàn)示例
這篇文章主要為大家介紹了Mybatis分頁插件PageHelper手寫實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼
我們把數(shù)據(jù)存到數(shù)據(jù)庫的時候,有些敏感字段是需要加密的,從數(shù)據(jù)庫查出來再進(jìn)行解密,如果我們使用的是Mybatis框架,那就跟著一起探索下如何使用框架的攔截器功能實現(xiàn)自動加解密吧,需要的朋友可以參考下2024-06-06
強(qiáng)烈推薦IDEA提高開發(fā)效率的必備插件
這篇文章主要介紹了強(qiáng)烈推薦IDEA提高開發(fā)效率的必備插件,文中有非常詳細(xì)的圖文示例,對想要提高企業(yè)開發(fā)效率的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
freemarker簡介_動力節(jié)點Java學(xué)院整理
FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫,有興趣的可以了解一下2017-08-08
詳解Spring學(xué)習(xí)總結(jié)——Spring實現(xiàn)AOP的多種方式
這篇文章主要介紹了詳解Spring學(xué)習(xí)總結(jié)——Spring實現(xiàn)AOP的多種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
SpringBoot+Redis防止接口重復(fù)提交問題
這篇文章主要介紹了SpringBoot+Redis防止接口重復(fù)提交問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06

