1. 程式人生 > >Quartz 框架 教程(中文版)2.2.x 之第二課 Quartz API,Jobs和Triggers簡介

Quartz 框架 教程(中文版)2.2.x 之第二課 Quartz API,Jobs和Triggers簡介

第二課:QuartzAPI,Jobs和Triggers簡介

Quartz API

Quartz API 關鍵的幾個介面:

          Scheduler:跟任務排程相關的最主要的API介面。

          Job:你期望任務排程執行的元件定義(排程器執行的內容),都必須實現該介面。

          JobDetail:用來定義Job的例項。

          Trigger:定義一個指定的Job何時被執行的元件,也叫觸發器。

          JobBuilder:用來定義或建立JobDetail的例項,JobDetail限定了只能是Job的例項。

          TriggerBuilder

:用來定義或建立觸發器的例項。

        排程器的生命週期,起始於SchedulerFactory的建立,終止於呼叫shutdown方法。當排程器介面例項建立完成後,就可以新增,刪除和查詢JobsTriggers物件,也可以執行其它的跟排程器相關的操作,比如中止觸發器的觸發。並且,排程器在呼叫start方法之前,不會觸發任何一個觸發器去執行作業任務,如第一課所示的例子。

          Quartz框架提供許多構造器類來定義一套領域特定語言,簡稱DSL,有時候也稱為“流介面”。在上一課中我們看到的示例,現在重新展示一部分程式碼如下:

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

        生成Job定義呼叫的方法程式碼塊靜態地匯入了JobBuilder類,同樣地,生成觸發器呼叫的方法程式碼塊靜態地匯入了TriggerBuilder類,SimpleScheduleBuilder類也是靜態匯入的。

         DSL靜態匯入的實現可以通過以下幾個import語句完成:

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例項物件,尤其針對特定的時間點,比如下一個的整點時間,換言之現在是9:43:27,我需要得到10:00:00的時間物件。

Jobs和Triggers

     作業任務類實現Job介面,只有一個方法,

package org.quartz;

  public interface Job {

    public void execute(JobExecutionContext context)
      throws JobExecutionException;
  }

       當作業任務的觸發器被觸發的那一刻,排程器的一個工作執行緒,將會呼叫該Jobexecute方法。JobExecutionContext物件會向execute方法傳遞執行時環境的工作任務資訊:執行該方法的排程器引用,觸發該方法執行的觸發器引用,Job例項的JobDetail物件,以及一些其它資訊。

        當排程器新增Job例項時,會在Quartz客戶端程式中(咱們自己開發的程式碼)建立JobDetail物件。JobDetailJob例項提供了許多設定屬性,以及JobDataMap成員變數屬性,它用來儲存特定Job例項的狀態資訊。這是從本質上定義Job例項,我們將會在下一節中深入地討論相關的細節。

        觸發器物件用來觸發Job物件的執行,當你希望排程一項作業任務,你可以例項化一個觸發器並且將觸發時間屬性調整為你期望的時間表。觸發器也可以關聯JobDataMap物件,可以非常方便地將具體的被觸發的觸發器當作引數傳遞給Job例項。

          Quartz框架附帶少數不同型別的觸發器,但最常用的型別是SimpleTriggerCronTrigger

          SimpleTrigger適用於一次性的任務執行(在給定的時間段只執行一次的作業任務),或者你需要在指定時間多次觸發作業任務,每次觸發都延遲固定的時間。CronTrigger適用於基於類似日曆時間表的觸發,比如“每個週五的下午”或是“每月10號的10:15”。

        為什麼要分別定義作業任務和觸發器?許多作業排程並沒有區分作業任務和觸發器的概念。有些框架把作業任務簡單定義成執行時間(或計劃)以及一些小作業識別符號,其他框架更像是整合了Quartz框架的作業和觸發器物件。因此我們設計Quartz時,我們決定構建排程器時拆分開排程和任務是有意義的,在我看來,這樣做還是有許多好處。

        例如,作業任務可以獨立於觸發器在作業排程中建立和儲存,多個觸發器可以關聯到相同的作業任務中。另一個好處是在作業任務關聯的觸發器失效後,仍然能夠在排程器上鬆耦合地配置作業任務,因此該作業不需要重新定義,一段時間後能夠重新排程。它還允許你在不重新例項化關聯的作業任務下修改和替換觸發器。

Identites(識別符號)

        作業任務和觸發器被註冊到Quartz排程器時需要提供標識資訊。這種標識資訊(也稱作作業任務鍵和觸發器鍵)允許作業任務和觸發器按組存放,這樣可以很方便地將你的作業任務和觸發器分組,比如分為“報表類Job”和“維護類Job”。作業任務和觸發器的鍵的名稱部分在同一個組內必須唯一,換句話說,作業任務和觸發器的鍵(或識別符號)的名字是由鍵名和組名共同組成的。

    現在你對作業任務和觸發器有一個大概的瞭解了,你可以在“第三課 更多關於Jobs和JobDetails”和“第四課 更多關於Triggers”學到更多關於它們的知識。

相關推薦

Quartz 框架 教程中文版2.2.x 第二 Quartz API,JobsTriggers簡介

第二課:QuartzAPI,Jobs和Triggers簡介 Quartz API Quartz API 關鍵的幾個介面:           Scheduler:跟任務排程相關的最主要的API介面。           Job:你期望任務排程執行的元件定義(排程器執行

Quartz 框架 教程中文版2.2.x 第九 JobStores

第九課 JobStores            JobStore是負責跟蹤排程器中所有的工作資料:作業任務、觸發器、日曆等。為你的Quartz排程器例項選擇一個適當的JobStore是非常重要的一步。幸運的是,一旦你理解了這些JobStore之間的區別,選擇它們是非常

Quartz 框架 教程中文版2.2.x 第五 SimpleTrigger

第五課 SimpleTrigger         如果你需要在一個指定時間段內執行一次作業任務或是在指定的時間間隔內多次執行作業任務,SimpleTrigger應該能滿足你的排程需求。例如,你希望觸發器在2015年1月13日上午11:23:54準時觸發,或是希望在那個

Quartz 框架 教程中文版2.2.x 第六 CronTrigger

第六課 CronTrigger          CronTrigger比SimpleTrigger更常用,當你需要一個基於日曆般概念的作業排程器,而不是像SimpleTrigger那樣精確指定間隔時間。 使用SimpleTrigger,你可以這樣指定觸發時間表例如“每

大資料學習初級入門教程 —— Hadoop 2.x 的安裝、啟動測試

大資料最基礎的就是資料的儲存和計算,而 Hadoop 就是為儲存和計算而生,是最基礎的大資料處理工具。這篇簡單寫寫 Hadoop 2.x 的安裝,啟動和測試。 一、準備環境 大資料環境的部署,一般都是叢集,機器數量為奇數,這裡以 5 臺機器為例,作業系統為 CentOS 6.9_x64;

SDL入門教程2、直接通過Unicode讓SDL顯示中文

作者:龍飛2.1:SDL本身可以顯示中文嗎?        SDL的擴充套件庫SDL_ttf本身具備顯示中文的功能嗎?網上很多觀點,說不能顯示的,甚至做了分析解釋了原因。但是,事實是,SDL本身就可以顯示中文。如果我們看看SDL_ttf.c的原始碼,我們可以看到,最終用於構建

UAP-AC-LITE無線AP配置教程中文版

UBNT UAP-AC-LITE 軟AC控制器 優倍快無線AP 安裝完UniFi並打開之後,其會自動跳轉到頁面以對其進行配置。正式進入到控制器初始化設置界面,以下畫面只會在第一次安裝控制器後才會出現。1. 首先,選擇國家與時區,然後下一步。 2. 配置設備,在這一步驟中其自動掃描

Google Guava官方教程中文版

原文連結  譯文連結 譯者: 沈義揚,羅立樹,何一昕,武祖  校對:方騰飛 引言 Guava工程包含了若干被Google的 Java專案廣泛依賴 的核心庫,例如:集合 [collections] 、快取 [caching] 、原生型別支援 [primitives support] 、併發庫 [

PHP CI 框架教程 1 -- 安裝簡介

 CodeIgniter 是一個小巧但功能強大的 PHP 框架,作為一個簡單而“優雅”的工具包,它可以為開發者們建立功能完善的 Web 應用程式。是比較主流的一個PHP框架。 1. 安裝 下載後解壓縮,然後放到你應用伺服器對應的程式目錄中即可,如MAC (/Libr

ReactNavtive框架教程6(完)

注意:所有圖片放在了百度相簿空間,如果你看不到圖片,請複製圖片URL,然後貼上到位址列中進行檢視。 根據位置查詢 在Xcode中開啟 Info.plist ,右鍵,Add Row,增加一個key。 使用NSLocationWhenInUseUsa

ReactNavtive框架教程1

原文:http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript 注意:所有圖片放在了百度相簿空間,如果你看不到圖片,請複製圖片URL,然後貼上到位址列中進行檢視。開

Google Guava官方教程中文版

引言 Guava工程包含了若干被Google的 Java專案廣泛依賴 的核心庫,例如:集合 [collections] 、快取 [caching] 、原生型別支援 [primitives support] 、併發庫 [concurrency libraries] 、通用

Linux系列教程——Linux常用命令網絡關機重啟命令

route 註意 端口號 post rac pos 名稱 window ebo   前一篇博客我們講解了Linux壓縮和解壓縮命令,使用的最多的是tar命令,因為現在很多源碼包都是.tar.gz的格式,通過 tar -zcvf 能完成解壓。然後對於.zip格式的文件,使用g

【selenium3+JAVA】介面自動化測試教程——瀏覽器的啟動IE瀏覽器的啟動

前言 同chrome、firefox,ie瀏覽器的啟動一樣需要driver,但是IEDriver不像chromeDriver一樣有多個版本,不同版本對應不同的chrome版本,它只有32位版本和64位版本兩種; 下載地址為:https://www.seleniu

最全Pycharm教程41——Pycharm擴充套件功能便籤註釋

  1、主題   在開發專案的過程中經常需要建立任務列表,對於一些小任務,在程式碼中插入便籤註釋會有奇效。   這種註釋的格式如下:   2、建立便籤註釋   非常簡單:   首先,將游標定位到相應行。   然後,建立一行註釋(Ctrl+Slash)。

最全Pycharm教程26——Pycharm搜尋導航檔名、符號名搜尋

  1、準備一個工程   向你的工程中新增一個Python檔案,並輸入一些原始碼,例如:   2、轉到對應檔案、類、符號   Pycharm提供的一個很強力的功能就是能夠根據名稱跳轉到任何檔案、類、符號所在定義位置。   3、跳轉到檔案   按下Ctrl+S

WebMagic爬蟲入門教程爬取汽車家的例項-品牌車系車型結構等

    本文使用WebMagic爬取汽車之家的品牌車系車型結構價格能源產地國別等;java程式碼備註,只是根據url變化爬取的,沒有使用爬取script頁面具體的資料,也有反爬機制,知識簡單爬取html標籤爬取的網頁:    需要配置pom.xml <!-

Android View框架總結View佈局流程Draw過程

View的Draw時序圖ViewRootImpl.performTraversals過程ViewRootImpl.performDraw過程View.draw方法View.dispatchDraw過程LinearLayout的onDraw過程 View的Draw時序圖

Kafka教程---------------底層實現細節broker

目錄 一、資料儲存 我們從上面可以看到,broker中儲存的是各個topic的各個partition中的資料 1.資料目錄 每個broker都是有自己 存訊息資料的目錄(參考第一節的配置) 比如下圖是某個broker的資料目錄,裡面

最全Pycharm教程39——Pycharm版本控制本地Git用法

  1、主題   介紹如果通過Pycharm使用本地Git集。   2、準備工作     (1)PyCharm版本為2.7或更高   (2)已經建立一個工程   (3)Git外掛可用,對應可執行檔案在 Git page頁面正確配置   3、建立一個Git集