国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Quartz 2 定時任務(三):異常與中斷處理

Hydrogen / 1707人閱讀

摘要:注意為了共享在同一個中的,我們需要在上面這個實現類上加入和注解,詳見定時任務二多線程并發執行與數據共享。捕獲異常,取消所有觸發器在我們捕獲異常時,可以調用取消所有與這個作業有關的觸發器。

版權聲明:本文由吳仙杰創作整理,轉載請注明出處:https://segmentfault.com/a/1190000009141079

1. 作業異常

org.quartz.JobExecutionException 會在 Scheduler(調度器)運行錯誤時,由 job(作業)實現類拋出。

1.1 捕獲并解決異常,立即重新執行作業

在我們捕獲異常并解決異常后,可以調用 JobExecutionException#setRefireImmediately(true) 立即重新執行作業。

假設我們有一個會拋出異常的 job 實現類,job 實現類的代碼片斷如下:

try {
    // 一個異常例子,假設第一次傳入的 denominator 為 0,那么將會拋出異常
    calculation = 4815 / denominator;
} catch (Exception e) {
    JobExecutionException e2 = new JobExecutionException(e);

    // 在第一次異常后,修改 denominator 參數為 1,那么后面的執行就不會出錯了
    dataMap.put("denominator", "1");

    // true 表示立即重新執行作業
    e2.setRefireImmediately(true);
    throw e2;
}

上面的作業會在第一次執行時拋出 java.lang.ArithmeticException: / by zero 異常后,馬上又會執行一次,之后都可以正常執行作業。

注意: 為了共享在同一個 JobDetail 中的 JobDataMap,我們需要在上面這個 job 實現類上加入 @PersistJobDataAfterExecution@DisallowConcurrentExecution 注解,詳見 Quartz 2 定時任務(二):多線程并發執行與數據共享。

1.2 捕獲異常,取消所有觸發器

在我們捕獲異常時,可以調用 JobExecutionException#setUnscheduleAllTriggers(true) 取消所有與這個作業有關的觸發器。

假設我們有一個會拋出異常的 job 實現類,job 實現類的代碼片斷如下:

try {
    // 一個異常例子
    int zero = 0;
    calculation = 4815 / zero;
} catch (Exception e) {
    JobExecutionException e2 = new JobExecutionException(e);
    // true 表示 Quartz 會自動取消所有與這個 job 有關的 trigger,從而避免再次運行 job
    e2.setUnscheduleAllTriggers(true);
    throw e2;
}

上面的作業會在拋出異常后,就不再執行任何有關該作業的觸發器了。

2. 作業中斷

org.quartz.InterruptableJob 接口提供了一種中斷機制,這個接口只有一個方法 interrupt(),這個方法會在用戶發出中斷請求到 Scheduler(調度器)時觸發(即調用 Scheduler#interrupt(JobDetail#getKey()) 方法時觸發)。

其中 InterruptableJob 接口又繼承了 Job 接口,所以當我們使用時,只需要實現 InterruptableJob 接口,重寫其中的 executeinterrupt 方法即可。

3. 參考

Quartz API

PS:本文針對的 Quartz 版本為 Quartz 2.2.3。官方下載地址:Quartz 2.2.3 .tar.gz

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67077.html

相關文章

  • 海量日志中統計次數最多的100個IP

    摘要:由于標題長度限制,原題是這樣某系統萬,每十分鐘統計一下請求次數最多的個。請求寫到日志的話,其實就是超大文件中統計問題。 由于標題長度限制,原題是這樣:某系統QPS100萬,每十分鐘統計一下請求次數最多的100個IP。ip請求寫到日志的話,其實就是超大文件中統計top k問題。10分鐘6億條記錄,大約是10G級別,所以對于一般單機處理來講不能一次性加載到內存計算。所以分治算法是處理這類問...

    Cheng_Gang 評論0 收藏0
  • Spring 定時任務

    摘要:在定時器接口的方法中我們可以發現一個方法接受接口,而也是一個接口,抽象了觸發任務執行的觸發器。更常用的一個觸發器是,它使用表達式指定何時執行任務。配置定時任務首先看看配置。配置提供了命名空間,讓配置定時任務非常簡單。 本文參考自Spring官方文檔 34. Task Execution and Scheduling。 在程序中常常有定時任務的需求,例如每隔一周生成一次報表、每個月月末清...

    justCoding 評論0 收藏0
  • 微服務架構中,二次淺封裝實踐

    摘要:三實踐案例案例簡介分布式系統中,微服務基礎組件等,系統中間件,等,對常用功能配置等,進行二次淺封裝并統一集成管理,以滿足日常開發中基礎環境搭建與臨時工具的快速實現。 一、背景簡介 分布式系統中存在很多拆分的服務,在不斷迭代升級的過程中,會出現如下常見的棘手情況: 某個技術組件版本升級,依賴包升級導致部分語法或者API過期,或者組件修復緊急的問題,從而會導致分布式系統下各個服...

    Hujiawei 評論0 收藏0
  • SpringBoot中并發定時任務的實現、動態定時任務的實現(看這一篇就夠了)

    摘要:也是自帶的一個基于線程池設計的定時任務類。其每個調度任務都會分配到線程池中的一個線程執行,所以其任務是并發執行的,互不影響。 原創不易,如需轉載,請注明出處https://www.cnblogs.com/baixianlong/p/10659045.html,否則將追究法律責任!!! 一、在JAVA開發領域,目前可以通過以下幾種方式進行定時任務 1、單機部署模式 Timer:jdk中...

    BWrong 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<