Quartz運行原理

image.png

cron表達(dá)式

表達(dá)式格式(7個字段):秒 分 時 日 月 星期幾 年, 例如:0 0 13 25 1 ? 2025

特殊符號
  • *星號可以理解為每的意思,每秒、每分、每天、每月、每年
  • ?問號只能出現(xiàn)在日和星期這兩個位置,表示這個位置的值不確定
  • -減號表示一個范圍。例如:小時字段10-12,表示10點到12點之間
  • ,逗號表示一個列表。例如:星期字段1,3,5 表示周一、周三、周五三天
  • / 斜杠表示頻率。例如:秒字段0/15就是從0秒開始,每隔15秒執(zhí)行一次

Scheduler調(diào)度器常用API

  • scheduler.scheduleJob(jobDetail, trigger)
    說明:生成一個新的定時任務(wù)
  • scheduler.pauseJob(jobKey)
    說明:暫停一個定時任務(wù),參數(shù)jobKey代表該任務(wù)的唯一標(biāo)識
  • scheduler.resumeJob(jobKey)
    說明:恢復(fù)一個定時任務(wù),參數(shù)jobKey代表該任務(wù)的唯一標(biāo)識
  • scheduler.deleteJob(jobKey)
    說明:刪除一個定時任務(wù),參數(shù)jobKey代表該任務(wù)的唯一標(biāo)識
  • scheduler.rescheduleJob(triggerKey,trigger)
    說明:修改一個定時任務(wù),triggerKey代表老觸發(fā)器的key,trigger代表新觸發(fā)器
  • scheduler.triggerJob(jobKey);
    說明:執(zhí)行一次定時任務(wù)

實現(xiàn)動態(tài)調(diào)度的定時任務(wù)

  • 自定義任務(wù)類
MyJob implements Job
void execute(JobExecutionContext context)
  • 任務(wù)Bean
JobBean
String jobName
string jobclass
String cronExpression
  • 操作任務(wù)的工具欄(重點)
JobUtil
static void createJob(Scheduler scheduler, JobBean jobBean)
static void pauseJob(Scheduler scheduler, String jobName)
static void resumeJob(Scheduler scheduler, String jobName)
static void deleteJob(Scheduler scheduler, String  jobName)
static void runJobOnce(Scheduler scheduler, String jobName)
static void modifyJob(Scheduler scheduler, JobBean jobBean)
  • 編寫控制器操作任務(wù)
QuartzController
String createJob()
String pauseJob()
String resumeJob()
String deleteJob()
String runJobOnce()
String modifyJob()
  • 關(guān)于修改定時任務(wù)的問題
    misfire
    問題描述
    當(dāng)調(diào)度器執(zhí)行 rescheduleJob(triggerKey,trigger)去更新某個triggerKey對應(yīng)的新trigger時,會導(dǎo)致新trigger相關(guān)聯(lián)的定時任務(wù)立即執(zhí)行一次(暫停任務(wù)亦如此)。
    解決辦法
    為CronscheduleBuilder設(shè)置withMisfireHandlingInstructionDoNothing()忽略所有錯過的任務(wù),按正常調(diào)度繼續(xù)執(zhí)行。

定時任務(wù)misfire機(jī)制

  1. 什么是misfire
    1.1. 定時任務(wù)被觸發(fā)了稱為 fire ,那么 misfire 自然就稱之為"錯過的觸發(fā)"
    1.2. 誤解:失火、啞火

  2. 為什么出現(xiàn)misfire
    2.1. 資源緊張,定時任務(wù)請求不到對應(yīng)的線程
    2.2. 調(diào)度器關(guān)閉
    2.3. 設(shè)置定時任務(wù)的開始時間早于啟動時間(未明確指定開始時間,則開始時間=啟動時間)

  3. misfire的補(bǔ)償
    3.1.不同的trigger,存在不同的補(bǔ)償策略說明:本文針對CronTrigger講解,SimpleTrigger的內(nèi)容請自行查閱資料
    3.2. 補(bǔ)償策略
    withMisfireHandlingInstructionDoNothing()
    說明:錯過的不再補(bǔ)償,然后正常調(diào)度
    withMisfireHandlingInstructionFireAndProceed()
    說明:錯過的全部合并成一次,并立即補(bǔ)償(即使任務(wù)終止時間已達(dá)到),然后正常調(diào)度。默認(rèn)值
    withMisfireHandlingInstructionIgnoreMisfires()
    說明:錯過的全部立即補(bǔ)償(即使任務(wù)終止時間已達(dá)到),然后正常調(diào)度


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容