Quartz任務排程快速入門9

2021-08-31 08:48:55 字數 1235 閱讀 5701

下面我們來觀察一下不同時期qrtz_******_triggers表的資料:

1.執行**清單2的******triggerrunner一小段時間後退出:

repeat_count表示需要執行的總次數,而times_trigger表示已經執行的次數。

2.執行**清單7的jdbcjobstorerunner恢復trigger1_1的觸發器,執行一段時間後退出,這時qrtz_******_triggers中的資料如下:

首先quartz會將原repeat_count-times_trigger得到新的repeat_count值,並記錄已經執行的次數(重新從0開始計算)。

3.重新啟動jdbcjobstorerunner執行後,資料又將發生相應的變化:

4.繼續執行直至完成所有剩餘的次數,再次查詢qrtz_******_triggers表:

這時,該表中的記錄已經變空。

值得注意的是,如果你使用jdbc儲存任務排程資料時,當你執行**清單2的******triggerrunner然後退出,當再次希望執行******triggerrunner時,系統將丟擲jobdetail重名的異常:

unable to store job with name: 'job1_1' and group: 'jgroup1', because one already exists with this identification.

因為每次呼叫scheduler#schedulejob()時,quartz都會將jobdetail和trigger的資訊儲存到資料庫中,如果資料表中已經同名的jobdetail或trigger,異常就產生了。

本文使用quartz 1.6版本,我們發現當後台資料庫使用mysql時,資料儲存不成功,該錯誤是quartz的乙個bug,相信會在高版本中得到修復。因為hsqldb不支援select * from table_name for update的語法,所以不能使用hsqldb資料庫。

小結quartz提供了最為豐富的任務排程功能,不但可以制定週期性執行的任務排程方案,還可以讓你按照日曆相關的方式進行任務排程。quartz框架的重要元件包括job、jobdetail、trigger、scheduler以及輔助性的jobdatamap和schedulercontext。

quartz擁有乙個執行緒池,通過執行緒池為任務提供執行執行緒,你可以通過配置檔案對執行緒池進行引數定製。quartz的另乙個重要功能是可將任務排程資訊持久化到資料庫中,以便系統重啟時能夠恢復已經安排的任務。此外,quartz還擁有完善的事件體系,允許你註冊各種事件的***。

Quartz任務排程快速入門5

使用crontrigger crontrigger 能夠提供比 trigger 更有具體實際意義的排程方案,排程規則基於 cron 表示式,crontrigger 支援日曆相關的重複時間間隔 比如每月第乙個周一執行 而不是簡單的週期時間間隔。因此,相對於 trigger而言,crontrigger在...

任務排程 Quartz

首先,quartz是什麼 先看看我們生活中的例子 每月的2月21號提醒我今天是男朋友的生日 每月的17號提醒我大姨媽快要來了 每隔一小時提醒我起來走走運動運動 就是在某乙個有規律的時間點乾某件事。並且時間的觸發的條件可以非常複雜 比如每月最後乙個工作日的17 50 複雜到需要乙個專門的框架來幹這個事...

Quartz任務排程

id設定為自動獲取 每乙個必須不同 所有排程器例項中是唯一的 org.quartz.scheduler.instanceid auto 指定排程程式的主線程是否應該是守護執行緒 org.quartz.scheduler.makeschedulerthreaddaemon true threadpoo...