Quartz调度器学习--基本概念
1,觸發器有一個startTime 和 endTime 屬性,startTime 規定Trigger何時生效,endTime規定Trigger何時失效。
2,Trigger的優先級:Quartz管理著一個線程池,用來進行作業的執行。當可用線程數目少于目前待調度的作業數目時,哪個作業的Trigger優先級高,該作業就會優先分配 work thread 執行。當然,作業的Trigger優先級的比較只在具有相同調度時間的作業之間比較,如所有10點鐘執行的作業;而9點鐘執行的作業的Trigger優先級盡管低于10點鐘作業的Trigger優先級。顯然,9點鐘的作業還是先執行的。
?
3,Misfire Instructions----錯過作業觸發時機時怎么辦?
Quartz中有一個默認的處理機制--"smart policy"機制。同時,你也可以在為作業配置Triggers時,明確指定作業的misfire instructions。當使用“smart policy”機制時,對于SimpleTrigger而言,它會動態地選擇一個合適的觸發機制,SimpleTrigger.updateAfterMisfire()方法解釋了此種情況下如何觸發作業。
SimpleTrigger以常量的形式預定義了一些觸發機制,這些機制如下:
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY MISFIRE_INSTRUCTION_FIRE_NOW MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT?
4,Quartz提供了一個Calendar對象(不是java.util.Calendar)來更加精細化地設置作業的觸發條件。Calendar主要的用途就是:在需要重復地調度作業時,排除某些特殊的日期(比如周末時不執行作業)。
?
5,如何構造一個Trigger,Trigger監聽器能監聽什么?
Trigger的構造主要牽涉到三個類:TriggerBuilder、SimpleScheduleBuilder、DateBuilder。通過靜態導入,可以以一種DSL語言風格形式來編寫代碼。Trigger監聽器可以監聽Trigger在指定的時間被觸發了,或者未被觸發。也可監聽Trigger已經觸發“完畢”。
?
6,如何創建監聽器,如何注冊監聽器?
創建Trigger監聽器:implements TriggerListener 接口或者繼承TriggerListenerSupport類。implements TriggerListener 接口需要實現接口中定義的所有的方法,而繼承TriggerListenerSupport類只需要重寫(Override)自己感興趣的方法。同理創建Job監聽器。
監聽器的注冊需要ListenerManager類來管理注冊的監聽器,并需要Matcher類來匹配在事件發生時,是哪個Job執行需要執行何種操作。
?
7,調度監聽器--SchedulerListener
調度器監聽器監聽的事件包括:Job/Trigger的執行或觸發、Job/Trigger的刪除、通知調度器即將關閉以及調度器本身出錯。
?
8,作業的存儲--RAMJobStore 和 JDBCJobStore
RAMJobStore 把整個作業存儲在內存中,作業運行完成后,就被刪除了。
JDBCJobStore 將作業存儲在數據庫中,在使用JDBCJobStore之前,必須先配置好數據庫,并創建一系列的數據庫表來存儲作業的相關信息。
在Quartz安裝包的"docs/dbTables"目錄下已經有相關的數據庫操作腳本來創建這些表了,只需要修改一下符合自己安裝的數據庫即可。
本文轉自hapjin博客園博客,原文鏈接:http://www.cnblogs.com/hapjin/p/4903417.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Quartz调度器学习--基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下动态库(*.so)的路径问题
- 下一篇: String和StringBuffer的