亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

台安县| 灵寿县| 双流县| 米脂县| 乐山市| 汝南县| 庄河市| 酒泉市| 海南省| 洪泽县| 绵阳市| 沙河市| 祁东县| 无极县| 舒城县| 丰顺县| 通渭县| 黑龙江省| 宜宾县| 临邑县| 宜州市| 泾川县| 安新县| 磴口县| 仙桃市| 金溪县| 永顺县| 伊川县| 乐陵市| 巢湖市| 鄂伦春自治旗| 武宣县| 封开县| 利辛县| 鄂尔多斯市| 二连浩特市| 芜湖市| 碌曲县| 邓州市| 若尔盖县| 图们市|