Quartz 核心概念
我們需要明白 Quartz 的幾個(gè)核心概念,這樣理解起 Quartz 的原理就會(huì)變得簡(jiǎn)單了址儒。
- Job 表示一個(gè)工作捕发,要執(zhí)行的具體內(nèi)容庙楚。此接口中只有一個(gè)方法面哥,如下:
void execute(JobExecutionContext context)
- JobDetail 表示一個(gè)具體的可執(zhí)行的調(diào)度程序哎壳,Job 是這個(gè)可執(zhí)行程調(diào)度程序所要執(zhí)行的內(nèi)容,另外 JobDetail 還包含了這個(gè)任務(wù)調(diào)度的方案和策略尚卫。
- Trigger 代表一個(gè)調(diào)度參數(shù)的配置归榕,什么時(shí)候去調(diào)。
- Scheduler 代表一個(gè)調(diào)度容器吱涉,一個(gè)調(diào)度容器中可以注冊(cè)多個(gè) JobDetail 和 Trigger刹泄。當(dāng) Trigger 與 JobDetail 組合,就可以被 Scheduler 容器調(diào)度了怎爵。
Key
將 Job 和 Trigger 注冊(cè)到 Scheduler 時(shí)特石,可以為它們?cè)O(shè)置 key,配置其身份屬性鳖链。 Job 和 Trigger 的 key(JobKey 和 TriggerKey)可以用于將 Job 和 Trigger 放到不同的分組(group)里姆蘸,然后基于分組進(jìn)行操作。同一個(gè)分組下的 Job 或 Trigger 的名稱必須唯一芙委,即一個(gè) Job 或 Trigger 的 key 由名稱(name)和分組(group)組成逞敷。
job的一個(gè) trigger 被觸發(fā)后(稍后會(huì)講到),execute() 方法會(huì)被 scheduler 的一個(gè)工作線程調(diào)用题山;傳遞給 execute() 方法的 JobExecutionContext 對(duì)象中保存著該 job 運(yùn)行時(shí)的一些信息 兰粉,執(zhí)行 job 的 scheduler 的引用,觸發(fā) job 的 trigger 的引用顶瞳,JobDetail 對(duì)象引用玖姑,以及一些其它信息。
JobDetail 對(duì)象是在將 job 加入 scheduler 時(shí)慨菱,由客戶端程序(你的程序)創(chuàng)建的焰络。它包含 job 的各種屬性設(shè)置,以及用于存儲(chǔ) job 實(shí)例狀態(tài)信息的 JobDataMap
rigger 用于觸發(fā) Job 的執(zhí)行符喝。當(dāng)你準(zhǔn)備調(diào)度一個(gè) job 時(shí)闪彼,你創(chuàng)建一個(gè) Trigger 的實(shí)例,然后設(shè)置調(diào)度相關(guān)的屬性协饲。Trigger 也有一個(gè)相關(guān)聯(lián)的 JobDataMap畏腕,用于給 Job 傳遞一些觸發(fā)相關(guān)的參數(shù)。