Quartz- Quartz API以及Jobs 和Triggers介绍
文章目錄
- Quartz API
- Jobs 和 Triggers
- 唯一標識
Quartz API
Quartz API 主要包含了以下接口
-
Scheduler – 調度器,任務調度的主 API。
-
Job – 由調度器調度的任務需要實現的接口。
-
JobDetail – 用于定義任務的實例。
-
Trigger – 用于定義需要執行的任務和任務的執行時間。
-
JobBuilder – 用于定義/創建 JobDetail 實例。
-
TriggerBuilder – 用于定義/創建 Trigger 對象。
Scheduler(調度器)的生命周期由 SchedulerFactory 創建 Scheduler 開始到調用 shutdown() 結束。
一旦創建了 Scheduler 實例,就可以新增,移除,查看 Job 和 Trigger,和執行其它調度相關工作(例如暫停 Trigger)。
如果 Scheduler 沒有調用 start() 方法,那么將不會執行任何 Trigger 上的任務。
Quartz 定義了 builder 類,它們定義了 Domain Specific Language(DSL,有時也成為“流式接口”)。
如下所示
// define the job and tie it to our HelloJob classJobDetail job = newJob(MyJob.class).withIdentity("myJob", "group1") // name "myJob", group "group1".build();// Trigger the job to run now, and then every 40 secondsTrigger trigger = newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()) .build();// Tell quartz to schedule the job using our triggersched.scheduleJob(job, trigger);上面代碼中:
創建 job 使用到的方法來自靜態導入的 JobBuilder 類,
創建 Trigger 的方法來自靜態導入的 TriggerBuilder,
同樣也靜態導入了 SimpleScheduleBuilder。
靜態導入的 DSL 可以通過下面語法定義:
import static org.quartz.JobBuilder.*; import static org.quartz.SimpleScheduleBuilder.*; import static org.quartz.CronScheduleBuilder.*; import static org.quartz.CalendarIntervalScheduleBuilder.*; import static org.quartz.TriggerBuilder.*; import static org.quartz.DateBuilder.*;ScheduleBuilder 有多個變體,用于定義不同類型的周期。
DateBuilder 中包含了大量的方法方便創建 java.util.Date 實例來指定時間。
Jobs 和 Triggers
任務需要實現 Job 接口,接口中只有一個方法:
package org.quartz;public interface Job {public void execute(JobExecutionContext context)throws JobExecutionException;}當任務的 Trigger 被觸發,任務的 execute 方法將會由調度器的一個工作線程調用。傳入這個方法的 JobExecutionContext 對象用于提供任務運行環境的信息(包含了一個 Scheduler 的句柄,一個Trigger 的句柄,一個 JobDetail 的句柄和幾個其它項)。
JobDetail 由 Quartz 客戶端創建(你自己編寫)。它包含了大量的任務屬性設置和 JobMetaMap 對象(可用于存儲任務的狀態信息)。這個類本質上來說是用于定義 Job 對象。
Trigger 對象用于觸發任務的執行。它定義了任務的執行時間。當你創建了一個 Trigger,你需要提供你需要的時間表(schedule)用于控制任務的執行。Trigger 可能還包含了 JobDataMap 對象,當你需要傳遞參數給 Job 的時候,這個類就相當有用。Quartz 提供了幾個 Trigger 的實現,其中最常用的是 SimpleTrigger 和 CronTrigger。
SimpleTrigger 用于執行某個時間點執行一次的任務,或用于在某個時間執行一次任務,并且在 T 周期重復執行 N 次。CronTrigger 用于基于日歷的任務,例如“每周五中午”或“每個月10號上午10點15分”執行。
為什么需要 Job 和 Trigger?有些任務調度方案沒有分離 job 和 trigger,為什么 Quartz 需要分別定義 Job 和 Trigger 呢?主要基于以下考慮。
多個 Job 可以保存到同一個 Trigger,多個 Trigger 也可以關聯到相同的 Job。這種松耦合的設計的另外一個好處是可以在 trigger 過期后配置任務到調度器中,方便以后重新開始任務,而不用再次定義任務。也允許在不更換任務的情況下更改和替換 Trigger。
唯一標識
Jobs 和 Triggers 可以使用 Quartz 調度器注冊一個唯一標識。Job 和 Trigger 的鍵(JobKey 和 TriggerKey)允許進行分組,這對于任務和觸發器來說非常易于組織成像“報表任務”或“維護任務”這樣的分組。 分組中的鍵必須唯一。
總結
以上是生活随笔為你收集整理的Quartz- Quartz API以及Jobs 和Triggers介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartz-任务调度概述及Quartz
- 下一篇: Quartz-Job 详解