Java框架Quartz中API、Jobs和Trigger詳解
Quartz API
Quartz API的關(guān)鍵接口是:
- Scheduler - 與調(diào)度程序交互的主要API。
- Job - 你想要調(diào)度器執(zhí)行的任務(wù)組件需要實(shí)現(xiàn)的接口
- JobDetail - 用于定義作業(yè)的實(shí)例。
- Trigger(即觸發(fā)器) - 定義執(zhí)行給定作業(yè)的計(jì)劃的組件。
- JobBuilder - 用于定義/構(gòu)建 JobDetail 實(shí)例,用于定義作業(yè)的實(shí)例。
- TriggerBuilder - 用于定義/構(gòu)建觸發(fā)器實(shí)例。
- Scheduler 的生命期,從 SchedulerFactory 創(chuàng)建它時(shí)開(kāi)始,到 Scheduler 調(diào)用shutdown() 方法時(shí)結(jié)束;Scheduler 被創(chuàng)建后,可以增加、刪除和列舉 Job 和 Trigger,以及執(zhí)行其它與調(diào)度相關(guān)的操作(如暫停 Trigger)。但是,Scheduler 只有在調(diào)用 start() 方法后,才會(huì)真正地觸發(fā) trigger(即執(zhí)行 job)
Job 和 Trigger
一個(gè) job 就是一個(gè)實(shí)現(xiàn)了 Job 接口的類,該接口只有一個(gè)方法:
Job 接口:
package org.quartz; public interface Job { public void execute(JobExecutionContext context) throws JobExecutionException; }
job的一個(gè) trigger 被觸發(fā)后,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。
Trigger 用于觸發(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ù)。Quartz 自帶了各種不同類型的 Trigger,最常用的主要是 SimpleTrigger 和 CronTrigger。
SimpleTrigger 主要用于一次性執(zhí)行的 Job(只在某個(gè)特定的時(shí)間點(diǎn)執(zhí)行一次),或者 Job 在特定的時(shí)間點(diǎn)執(zhí)行,重復(fù)執(zhí)行 N 次,每次執(zhí)行間隔T個(gè)時(shí)間單位。CronTrigger 在基于日歷的調(diào)度上非常有用,如“每個(gè)星期五的正午”,或者“每月的第十天的上午 10:15”等。
為什么既有 Job,又有 Trigger 呢?
例如,Job 被創(chuàng)建后,可以保存在 Scheduler 中,與 Trigger 是獨(dú)立的,同一個(gè) Job可以有多個(gè) Trigger;
這種松耦合的另一個(gè)好處是,當(dāng)與 Scheduler 中的 Job 關(guān)聯(lián)的 trigger 都過(guò)期時(shí),可以配置 Job 稍后被重新調(diào)度,而不用重新定義 Job;
還有,可以修改或者替換 Trigger,而不用重新定義與之關(guān)聯(lián)的 Job。
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)組成。
到此這篇關(guān)于Java框架Quartz中API、Jobs和Trigger詳解的文章就介紹到這了,更多相關(guān)Quartz的API、Jobs和Trigger內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux中Elasticsearch的安裝詳細(xì)步驟
這篇文章主要介紹了Linux中Elasticsearch的安裝詳細(xì)步驟,Elasticsearch(ES)是一種分布式、可擴(kuò)展的搜索和分析引擎,基于Lucene構(gòu)建,它支持實(shí)時(shí)數(shù)據(jù)處理、全文搜索、實(shí)時(shí)分析等多種功能,需要的朋友可以參考下2024-12-12JSON序列化Redis讀取出錯(cuò)問(wèn)題解決方案
這篇文章主要介紹了JSON序列化Redis讀取出錯(cuò)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Java 中一個(gè)類提供一個(gè)默認(rèn)對(duì)象的多種方法
這篇文章主要介紹了Java 中一個(gè)類提供一個(gè)默認(rèn)對(duì)象的多種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07解決SpringMvc中普通類注入Service為null的問(wèn)題
這篇文章主要介紹了解決SpringMvc中普通類注入Service為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07使用SpringBoot根據(jù)配置注入接口的不同實(shí)現(xiàn)類(代碼演示)
使用springboot開(kāi)發(fā)時(shí)經(jīng)常用到@Autowired和@Resource進(jìn)行依賴注入,但是當(dāng)我們一個(gè)接口對(duì)應(yīng)多個(gè)不同的實(shí)現(xiàn)類的時(shí)候如果不進(jìn)行一下配置項(xiàng)目啟動(dòng)時(shí)就會(huì)報(bào)錯(cuò),那么怎么根據(jù)不同的需求注入不同的類型呢,感興趣的朋友一起看看吧2022-06-06Java并發(fā)編程service層處理并發(fā)事務(wù)加鎖可能會(huì)無(wú)效問(wèn)題
這篇文章主要介紹了Java并發(fā)編程service層處理并發(fā)事務(wù)加鎖可能會(huì)無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07