亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

Hydrogen / 1835人閱讀

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

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

1. 作業(yè)異常

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. 作業(yè)中斷

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

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

3. 參考

Quartz API

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/67077.html

相關(guān)文章

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

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

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

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

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

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

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

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

    BWrong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<