91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

伊金霍洛旗| 邮箱| 上杭县| 南阳市| 齐齐哈尔市| 江孜县| 鹤峰县| 土默特左旗| 博罗县| 古浪县| 元氏县| 泗洪县| 柳州市| 潼南县| 湘西| 德惠市| 应城市| 永顺县| 宁陕县| 永年县| 科尔| 峨山| 天柱县| 江门市| 响水县| 木兰县| 黑山县| 财经| 织金县| 静安区| 东方市| 得荣县| 包头市| 平远县| 武乡县| 夹江县| 崇礼县| 凤阳县| 河池市| 宝鸡市| 西宁市|