日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Quartz- Quartz API以及Jobs 和Triggers介绍

發(fā)布時(shí)間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz- Quartz API以及Jobs 和Triggers介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • Quartz API
  • Jobs 和 Triggers
  • 唯一標(biāo)識(shí)

Quartz API

Quartz API 主要包含了以下接口

  • Scheduler – 調(diào)度器,任務(wù)調(diào)度的主 API。

  • Job – 由調(diào)度器調(diào)度的任務(wù)需要實(shí)現(xiàn)的接口。

  • JobDetail – 用于定義任務(wù)的實(shí)例。

  • Trigger – 用于定義需要執(zhí)行的任務(wù)和任務(wù)的執(zhí)行時(shí)間。

  • JobBuilder – 用于定義/創(chuàng)建 JobDetail 實(shí)例。

  • TriggerBuilder – 用于定義/創(chuàng)建 Trigger 對(duì)象。


Scheduler(調(diào)度器)的生命周期由 SchedulerFactory 創(chuàng)建 Scheduler 開(kāi)始到調(diào)用 shutdown() 結(jié)束。

一旦創(chuàng)建了 Scheduler 實(shí)例,就可以新增,移除,查看 Job 和 Trigger,和執(zhí)行其它調(diào)度相關(guān)工作(例如暫停 Trigger)。

如果 Scheduler 沒(méi)有調(diào)用 start() 方法,那么將不會(huì)執(zhí)行任何 Trigger 上的任務(wù)

Quartz 定義了 builder 類,它們定義了 Domain Specific Language(DSL,有時(shí)也成為“流式接口”)。

如下所示

// 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);

上面代碼中:
創(chuàng)建 job 使用到的方法來(lái)自靜態(tài)導(dǎo)入的 JobBuilder 類,
創(chuàng)建 Trigger 的方法來(lái)自靜態(tài)導(dǎo)入的 TriggerBuilder
同樣也靜態(tài)導(dǎo)入了 SimpleScheduleBuilder

靜態(tài)導(dǎo)入的 DSL 可以通過(guò)下面語(yǔ)法定義:

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 有多個(gè)變體,用于定義不同類型的周期。

DateBuilder 中包含了大量的方法方便創(chuàng)建 java.util.Date 實(shí)例來(lái)指定時(shí)間。


Jobs 和 Triggers

任務(wù)需要實(shí)現(xiàn) Job 接口,接口中只有一個(gè)方法:

package org.quartz;public interface Job {public void execute(JobExecutionContext context)throws JobExecutionException;}

當(dāng)任務(wù)的 Trigger 被觸發(fā),任務(wù)的 execute 方法將會(huì)由調(diào)度器的一個(gè)工作線程調(diào)用。傳入這個(gè)方法的 JobExecutionContext 對(duì)象用于提供任務(wù)運(yùn)行環(huán)境的信息(包含了一個(gè) Scheduler 的句柄,一個(gè)Trigger 的句柄,一個(gè) JobDetail 的句柄和幾個(gè)其它項(xiàng))。

JobDetail 由 Quartz 客戶端創(chuàng)建(你自己編寫(xiě))。它包含了大量的任務(wù)屬性設(shè)置和 JobMetaMap 對(duì)象(可用于存儲(chǔ)任務(wù)的狀態(tài)信息)。這個(gè)類本質(zhì)上來(lái)說(shuō)是用于定義 Job 對(duì)象。


Trigger 對(duì)象用于觸發(fā)任務(wù)的執(zhí)行。它定義了任務(wù)的執(zhí)行時(shí)間。當(dāng)你創(chuàng)建了一個(gè) Trigger,你需要提供你需要的時(shí)間表(schedule)用于控制任務(wù)的執(zhí)行。Trigger 可能還包含了 JobDataMap 對(duì)象,當(dāng)你需要傳遞參數(shù)給 Job 的時(shí)候,這個(gè)類就相當(dāng)有用。Quartz 提供了幾個(gè) Trigger 的實(shí)現(xiàn),其中最常用的是 SimpleTrigger 和 CronTrigger。

SimpleTrigger 用于執(zhí)行某個(gè)時(shí)間點(diǎn)執(zhí)行一次的任務(wù),或用于在某個(gè)時(shí)間執(zhí)行一次任務(wù),并且在 T 周期重復(fù)執(zhí)行 N 次。CronTrigger 用于基于日歷的任務(wù),例如“每周五中午”或“每個(gè)月10號(hào)上午10點(diǎn)15分”執(zhí)行。

為什么需要 Job 和 Trigger?有些任務(wù)調(diào)度方案沒(méi)有分離 job 和 trigger,為什么 Quartz 需要分別定義 Job 和 Trigger 呢?主要基于以下考慮。

多個(gè) Job 可以保存到同一個(gè) Trigger,多個(gè) Trigger 也可以關(guān)聯(lián)到相同的 Job。這種松耦合的設(shè)計(jì)的另外一個(gè)好處是可以在 trigger 過(guò)期后配置任務(wù)到調(diào)度器中,方便以后重新開(kāi)始任務(wù),而不用再次定義任務(wù)。也允許在不更換任務(wù)的情況下更改和替換 Trigger。


唯一標(biāo)識(shí)

Jobs 和 Triggers 可以使用 Quartz 調(diào)度器注冊(cè)一個(gè)唯一標(biāo)識(shí)。Job 和 Trigger 的鍵(JobKey 和 TriggerKey)允許進(jìn)行分組,這對(duì)于任務(wù)和觸發(fā)器來(lái)說(shuō)非常易于組織成像“報(bào)表任務(wù)”或“維護(hù)任務(wù)”這樣的分組。 分組中的鍵必須唯一。

總結(jié)

以上是生活随笔為你收集整理的Quartz- Quartz API以及Jobs 和Triggers介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。