国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Quartz API,Jobs和Triggers

2020-12-16 09:32 更新

Quartz API

Quartz API的關鍵接口是:

  • Scheduler - 與調(diào)度程序交互的主要API。
  • Job - 你想要調(diào)度器執(zhí)行的任務組件需要實現(xiàn)的接口
  • JobDetail - 用于定義作業(yè)的實例。
  • Trigger(即觸發(fā)器) - 定義執(zhí)行給定作業(yè)的計劃的組件。
  • JobBuilder - 用于定義/構建 JobDetail 實例,用于定義作業(yè)的實例。
  • TriggerBuilder - 用于定義/構建觸發(fā)器實例。
  • Scheduler 的生命期,從 SchedulerFactory 創(chuàng)建它時開始,到 Scheduler 調(diào)用shutdown() 方法時結束;Scheduler 被創(chuàng)建后,可以增加、刪除和列舉 Job 和 Trigger,以及執(zhí)行其它與調(diào)度相關的操作(如暫停 Trigger)。但是,Scheduler 只有在調(diào)用 start() 方法后,才會真正地觸發(fā) trigger(即執(zhí)行 job),見教程一。

Quartz 提供的“builder”類,可以認為是一種領域特定語言(DSL,Domain Specific Language)。教程一中有相關示例,這里是其中的代碼片段:(校對注:這種級聯(lián)的 API 非常方便用戶使用,大家以后寫對外接口時也可以使用這種方式)

// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
    .withIdentity("myJob", "group1") // name "myJob", group "group1"
    .build();

// Trigger the job to run now, and then every 40 seconds
Trigger trigger = newTrigger()
    .withIdentity("myTrigger", "group1")
    .startNow()
    .withSchedule(simpleSchedule()
        .withIntervalInSeconds(40)
        .repeatForever())            
    .build();

// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);

DSL 的靜態(tài)導入可以通過以下導入語句來實現(xiàn):

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.*;

SchedulerBuilder 接口的各種實現(xiàn)類,可以定義不同類型的調(diào)度計劃 (schedule);

DateBuilder 類包含很多方法,可以很方便地構造表示不同時間點的 java.util.Date 實例(如定義下一個小時為偶數(shù)的時間點,如果當前時間為 9:43:27,則定義的時間為10:00:00)。

Job 和 Trigger

一個 job 就是一個實現(xiàn)了 Job 接口的類,該接口只有一個方法:

Job 接口:


  package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)
      throws JobExecutionException;
  }

job的一個 trigger 被觸發(fā)后(稍后會講到),execute() 方法會被 scheduler 的一個工作線程調(diào)用;傳遞給 execute() 方法的 JobExecutionContext 對象中保存著該 job 運行時的一些信息 ,執(zhí)行 job 的 scheduler 的引用,觸發(fā) job 的 trigger 的引用,JobDetail 對象引用,以及一些其它信息。

JobDetail 對象是在將 job 加入 scheduler 時,由客戶端程序(你的程序)創(chuàng)建的。它包含 job 的各種屬性設置,以及用于存儲 job 實例狀態(tài)信息的 JobDataMap。本節(jié)是對 job 實例的簡單介紹,更多的細節(jié)將在下一節(jié)講到。

Trigger 用于觸發(fā) Job 的執(zhí)行。當你準備調(diào)度一個 job 時,你創(chuàng)建一個 Trigger 的實例,然后設置調(diào)度相關的屬性。Trigger 也有一個相關聯(lián)的 JobDataMap,用于給 Job 傳遞一些觸發(fā)相關的參數(shù)。Quartz 自帶了各種不同類型的 Trigger,最常用的主要是 SimpleTrigger 和 CronTrigger。

SimpleTrigger 主要用于一次性執(zhí)行的 Job(只在某個特定的時間點執(zhí)行一次),或者 Job 在特定的時間點執(zhí)行,重復執(zhí)行 N 次,每次執(zhí)行間隔T個時間單位。CronTrigger 在基于日歷的調(diào)度上非常有用,如“每個星期五的正午”,或者“每月的第十天的上午 10:15”等。

為什么既有 Job,又有 Trigger 呢?很多任務調(diào)度器并不區(qū)分 Job 和 Trigger。有些調(diào)度器只是簡單地通過一個執(zhí)行時間和一些 job 標識符來定義一個 Job;其它的一些調(diào)度器將 Quartz 的 Job 和 Trigger 對象合二為一。在開發(fā) Quartz 的時候,我們認為將調(diào)度和要調(diào)度的任務分離是合理的。在我們看來,這可以帶來很多好處。

例如,Job 被創(chuàng)建后,可以保存在 Scheduler 中,與 Trigger 是獨立的,同一個 Job可以有多個 Trigger;這種松耦合的另一個好處是,當與 Scheduler 中的 Job 關聯(lián)的 trigger 都過期時,可以配置 Job 稍后被重新調(diào)度,而不用重新定義 Job;還有,可以修改或者替換 Trigger,而不用重新定義與之關聯(lián)的 Job。

Key

將 Job 和 Trigger 注冊到 Scheduler 時,可以為它們設置 key,配置其身份屬性。 Job 和 Trigger 的 key(JobKey 和 TriggerKey)可以用于將 Job 和 Trigger 放到不同的分組(group)里,然后基于分組進行操作。同一個分組下的 Job 或 Trigger 的名稱必須唯一,即一個 Job 或 Trigger 的 key 由名稱(name)和分組(group)組成。

您現(xiàn)在有一個關于什么 Job 和觸發(fā)器的一般概念,您可以在第3課中了解更多信息有關作業(yè)和作業(yè)詳細信息以及第4課:有關觸發(fā)器的更多信息。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號