成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Hydrogen / 1741人閱讀

摘要:注意為了共享在同一個中的,我們需要在上面這個實現(xiàn)類上加入和注解,詳見定時任務(wù)二多線程并發(fā)執(zhí)行與數(shù)據(jù)共享。捕獲異常,取消所有觸發(fā)器在我們捕獲異常時,可以調(diào)用取消所有與這個作業(yè)有關(guān)的觸發(fā)器。

版權(quán)聲明:本文由吳仙杰創(chuàng)作整理,轉(zhuǎn)載請注明出處:https://segmentfault.com/a/1190000009141079

1. 作業(yè)異常

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

1.1 捕獲并解決異常,立即重新執(zhí)行作業(yè)

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

假設(shè)我們有一個會拋出異常的 job 實現(xiàn)類,job 實現(xiàn)類的代碼片斷如下:

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

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

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

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

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

1.2 捕獲異常,取消所有觸發(fā)器

在我們捕獲異常時,可以調(diào)用 JobExecutionException#setUnscheduleAllTriggers(true) 取消所有與這個作業(yè)有關(guān)的觸發(fā)器。

假設(shè)我們有一個會拋出異常的 job 實現(xiàn)類,job 實現(xiàn)類的代碼片斷如下:

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

上面的作業(yè)會在拋出異常后,就不再執(zhí)行任何有關(guān)該作業(yè)的觸發(fā)器了。

2. 作業(yè)中斷

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

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

3. 參考

Quartz API

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67077.html

相關(guān)文章

  • 海量日志中統(tǒng)計次數(shù)最多的100個IP

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

    Cheng_Gang 評論0 收藏0
  • Spring 定時任務(wù)

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

    justCoding 評論0 收藏0
  • 微服務(wù)架構(gòu)中,二次淺封裝實踐

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

    Hujiawei 評論0 收藏0
  • SpringBoot中并發(fā)定時任務(wù)的實現(xiàn)、動態(tài)定時任務(wù)的實現(xiàn)(看這一篇就夠了)

    摘要:也是自帶的一個基于線程池設(shè)計的定時任務(wù)類。其每個調(diào)度任務(wù)都會分配到線程池中的一個線程執(zhí)行,所以其任務(wù)是并發(fā)執(zhí)行的,互不影響。 原創(chuàng)不易,如需轉(zhuǎn)載,請注明出處https://www.cnblogs.com/baixianlong/p/10659045.html,否則將追究法律責(zé)任?。?! 一、在JAVA開發(fā)領(lǐng)域,目前可以通過以下幾種方式進(jìn)行定時任務(wù) 1、單機(jī)部署模式 Timer:jdk中...

    BWrong 評論0 收藏0

發(fā)表評論

0條評論

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