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

溫馨提示×

溫馨提示×

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

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

java版電子商務spring cloud分布式微服務b2b2c-Spring Cloud Task

發布時間:2020-08-04 20:22:11 來源:ITPUB博客 閱讀:141 作者:gung123 欄目:軟件技術

Spring Cloud Task的目標是為Spring Boot應用程序提供創建短運行期微服務的功能。

在Spring Cloud Task中,我們可以靈活地動態運行任何任務,按需分配資源并在任務完成后檢索結果。Tasks是

Spring Cloud Data Flow中的一個基礎項目,了解springcloud架構可以加求求:三五三六二四七二五九,允許用戶

將幾乎任何Spring Boot應用程序作為一個短期任務執行。

Spring Cloud Task的生命周期

現代的云平臺都是圍繞著長生命周期的服務而設計的,如web應用,一經啟用,除非手動去重啟應用,否則就會沒有

終點的持續運行。雖然大多數平臺都有方法在不重啟應用的情況下,將服務的生命周期推向終點,但每個服務的處理

結果難以以可重用的方式來維護。Spring Cloud Task可以在平臺環境中執行短生命周期的應用,并記錄這些應用的

結果,經由通過消息通知的機制來集成各個tasks。通過這特性就可以實現讓短生命周期的應用像長生命周期的應用一

樣組成微服務架構。

Spring Task Cloud的方式對現代的云環境是非常有用的,但它也在部署應用方面帶來新問題。如使用調度器(如corn)

來執行Spring Boot應用時,如何在應用結束后監控到其執行結果?

Spring Cloud Task采用的方法是,將Spring Boot應用分為開始、結束、以及正在運行等狀態。如批處理任務就是一個

清晰的短生命周期應用,Spring Cloud Task會監控指定任務的所有生命周期事件。

生命周期是一個任務task實例運行的全過程,也是一個被配置為task的Spring Boot應用被執行的過程(通過 添加@

EnableTask注解配置)。

在task剛剛開始運行時(CommandLineRunner或ApplicationRunner及其子類的實例被執行之前)TaskRespository會

創建一條task紀錄并將其標記為start狀態。start事件由spring框架的SmartLifecycle#start觸發。開始事件被觸發說明

了系統已經做好了執行CommandLineRunner或ApplicationRunner及其子類的實例的準備。

任務紀錄只有在 ApplicationContext被成功啟動后才會被紀錄。如果ApplicationContext沒有被成功啟動,那么task

的相關信息也不會被紀錄。

當Spring Boot應用的所有*Runner#run接口都被調用后,或者在ApplicationContext發生了失敗(由

ApplicationFailedEvent來表現),任務倉庫中此任務的執行結果都會被更新。

task 完成之后(*Runner#run方法被執行完)默認情況下會被關閉ApplicationContext。這個特性可以在配置文件中

設置spring.cloud.task.closecontext_enable屬性為false來更改。

其實現原理如下面代碼所示:

 public class TaskLifecycleListener{
        ...
        /**
         * 在發生task相關的事件后,會自動調用這個方法
         * Utilizes {@link ApplicationEvent}s to determine the start, end, and failure of a
         * task.  Specifically:
         * <ul>
         *     <li>{@link ContextRefreshedEvent} - Start of a task</li>
         *     <li>{@link ApplicationReadyEvent} - Successful end of a task</li>
         *     <li>{@link ApplicationFailedEvent} - Failure of a task</li>
         * </ul>
         *
         * @param applicationEvent The application being listened for.
         */
        @Override
        public void onApplicationEvent(ApplicationEvent applicationEvent) {
            if(applicationEvent instanceof ApplicationFailedEvent) {
                this.applicationFailedEvent = (ApplicationFailedEvent) applicationEvent;
                doTaskEnd();
            }
            else if(applicationEvent instanceof ExitCodeEvent){
                this.exitCodeEvent = (ExitCodeEvent) applicationEvent;
            }
            else if(applicationEvent instanceof ApplicationReadyEvent) {
                doTaskEnd();
            }
        }
        }
向AI問一下細節

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

AI

精河县| 皋兰县| 革吉县| 大悟县| 仲巴县| 博客| 隆德县| 内丘县| 阿克陶县| 水城县| 东源县| 兴安县| 东辽县| 武定县| 上林县| 屏边| 峡江县| 深水埗区| 南安市| 马关县| 墨脱县| 盈江县| 宜川县| 哈密市| 达孜县| 西乡县| 米林县| 崇信县| 扎囊县| 新邵县| 临高县| 陆川县| 荆门市| 诸城市| 东兴市| 望奎县| 门头沟区| 安图县| 肃宁县| 四子王旗| 邯郸县|