中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud中怎么使用RefreshScope刷新配置信息

發布時間:2021-07-30 16:38:02 來源:億速云 閱讀:783 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關SpringCloud中怎么使用RefreshScope刷新配置信息,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

我們有一個配置類:

@Component("smsTemplateConfig")
@ConfigurationProperties(prefix = "zt.sms")
@Data
//注意如下注解
@RefreshScope
@Slf4j
public class SmsTemplateConfig {
    /**
     * 是否發送短信
     */
    private Boolean send;
    /**
     * 短信位數
     */
    private Integer msgCodeDigits;


    @PostConstruct
    private void initialize() {
        log.info("SmsTemplateConfig initialized -  send: {},msgCodeDigits: {}", send, msgCodeDigits);
    }
}

該配置類,會在如下類種被用到:

@Component
public class MsgUtils {

    @Autowired
    private SmsTemplateConfig config;

    public SmsTemplateConfig getConfig() {
        return config;
    }

}

該配置類是關于短信配置相關的,然后,我們在配置中心修改了這個配置信息,那么服務就可以通過SpringCloud的RefreshScope這個類來熱加載配置信息,代碼如下:

RefreshScope.refresh("smsTemplateConfig");

RefreshScope的原理是:會先摧毀(destory),名稱為smsTemplateConfig這個實例,然后當smsTemplateConfig這個實例再被用到的時候再重新初始化。

那么,問題來了,MsgUtils 這個類是單例,在容器中只會初始化一次,容器不會再幫我們注入新的smsTemplateConfig實例,那么smsTemplateConfig被銷毀之后,是如何重新初始化的呢?

解決

普及兩個概念:

1.Spring中bean的生命周期可以用類Scope來標識,生命周期(Scope的子類)有Singleton,Prototype,Request,Session,SpringCloud又新增了Thread,Refresh這幾種,其中Singleton和Prototype是單獨的類,其它的都是Scope的子類 ;不同生命周期的Bean由各自對應的Scope來管理。

2.Spring對非Singleton的Scode都使用了代理機制。

基于上面兩個概念, 我們SmsTemplateConfig這個類上面有@RefreshScope這個注解,這個注解表示這個類的Scope是Refresh,也就是說,我們每次調用smsTemplateConfig這個實例,其實調用的是它的代理類。

有了這個結論之后,我們就需要去看代理類中添加了哪些邏輯,具體過程太復雜,這里直接說結論:每次通過代理對象執行原始對象的方法時,我們肯定要獲取到原始對象,這里,我們的原始對象smsTemplateConfig,它的生命周期是refresh,所以由RefreshScope管理,所以需要先獲取自身對應的RefreshScope,然后通過RefreshScope獲取對應實例,到了這一步,馬上就要揭開謎底了,既然是由RefreshScope獲取對應實例的,那么我就要看RefreshScope獲取的邏輯就好了,這里也是直接說結論,RefreshScope類內部有一個緩存,緩存了所有的生命周期為refresh的實例,假如緩存沒有命中,就會重新生成對應的實例,在前文中我們是不是摧毀了smsTemplateConfig的實例,那么在這里就會重新生成,也就是重新初始化了smsTemplateConfig實例。

關于SpringCloud中怎么使用RefreshScope刷新配置信息就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀化市| 当涂县| 拜城县| 武安市| 纳雍县| 和田市| 新巴尔虎左旗| 安国市| 延吉市| 新化县| 资兴市| 淳安县| 罗定市| 浙江省| 黔东| 正安县| 台州市| 东城区| 醴陵市| 平湖市| 大理市| 顺昌县| 白银市| 荣昌县| 桦甸市| 周口市| 怀柔区| 南通市| 郓城县| 潼关县| 达尔| 承德市| 门头沟区| 吉安市| 来安县| 石狮市| 新绛县| 东乡族自治县| 太原市| 石柱| 丁青县|