天天看點

Quartz Scheduler 起步

本文為官方文檔之翻譯,适用于Quartz Scheduler Version 2.2.1。

Quartz Scheduler 本文翻譯為 石英排程器。

内容表(目錄)

關于石英排程器

 什麼是石英排程器

         石英排程器特性

安裝和使用石英排程器

         下載下傳和安裝石英排程器

         配置石英排程器

         啟動一個簡單的程式

1關于石英排程器

n  什麼是石英排程器

n  石英排程器特性

什麼是石英排程器

石英排程器(Quartz Scheduler)是一種特性豐富、開源的任務排程程式庫,可以在任何java程式中使用。石英排程器可以用來建立簡單或者複雜的執行次數可以達成千上萬的任務。任務可以是任何java可以做的事情。石英排程器也有很多企業級的特性,比如JTA(Java Transaction API,JTA允許應用程式執行分布式事務處理——在兩個或多個網絡計算機資源上通路并且更新資料。JDBC驅動程式的JTA支援極大地增強了資料通路能力。)。

石英排程器可以為你做什麼

如果你的應用有任務需要在給定時間執行,或者你的系統需要定期執行某些任務,那麼石英排程器就是你的理想選擇。

石英排程器使用的例子:

驅動工作流程序:當一個新訂單生成後,指定一個計劃任務在2小時後觸發,該任務将會檢查訂單狀态,如果該訂單資訊沒有被接收到,那麼任務會發出一個警告的通知,并改變訂單的狀态為“等待介入”。

系統維護:每個商業日(及工作日,不包括各種假日)執行一個定時任務去備份資料庫。

為一個程式提供提醒服務。

石英排程器特性

運作時環境:

可以嵌入其它獨立的程式。

可以在服務程式(或者servlet container)中被初始化,并且參與XA事務。

也可以做獨立的程式運作。

也可以作為獨立程式的叢集來被初始化(通過負載平衡和fail-over capabilities(不會翻))進而執行多任務。

任務排程:

當給定觸發器被觸發後相應的任務會被執行。觸發器可以是以下任何指令的集合。

每天指定時間。

每周指定天。

每月指定天們(這裡的天是複數)。

指定日期不執行。

重複執行指定次數

重複執行到指定時刻

無限期執行

重複執行,每次執行時有指定的間隔。

任務們會被他們的構造器指定名稱,并且可以用指定名稱的組們來組織。觸發器也可以被指定名稱并被放置入任務組中。以上做法是為了更友善排程器管理它們。任務隻可以被加入排程器中一次,但是可以注冊多個觸發器。在企業級的java環境中,任務甚至可以在分布式環境中執行他們的事務。

任務執行

任務可以是任何實作了Job接口的java類。

Job類的執行個體,可是由Quartz來初始化,也可以由你的應用架構來初始化。

當一個觸發器被觸發後,排程器會通知一些java對象,這些對象必須實作 JobListener 和 TriggerListener 接口。這些接口在job被執行過後也會被通知到。

當任務結束後,排程器會傳回一個任務結束碼 ,這個碼會表示執行是成功了還是失敗了。通過這個碼排程器也可以決定是否立即重新執行任務或者執行其它操作。

任務持久性

Quartz的設計包含了一個JobStore接口,它可以用來提供多種機制來儲存任務。

通過使用JDBCJobStore,所有的任務和觸發器可以非易失性的形式來存儲在關系型資料庫裡。

通過使用RAMJobStore,所有的任務和觸發器都可以存儲在記憶體中,是以不能在兩次程式執行中存在,但是這樣的好處是不需要外部存儲器。

事務

Quartz可以參與到JTA事務中,通過使用JobStoreCMT。

Quartz可以管理JTA事務。

叢集特性

Provides fail-over.(不知道是啥)

提供負載均衡。

Quartz自有叢集特性,在資料庫持久儲存的基礎上。

Terracotta對Quartz的擴充,實作了一個叢集能力,不需要終端資料庫的支援。

監聽器群組件

通過實作相應的接口,應用可以捕捉到排程器的事件。然後就可以顯示或者控制任務/觸發器的行為。

組建機制可以為Quartz提供附加的功能,比如儲存執行曆史,或者從檔案中加載任務和觸發器。

Quartz與很多組建和監聽器通行。

2 安裝和使用Quartz Scheduler

n  下載下傳和安裝

n  配置

n  一個例子

下載下傳和安裝

http://quartz-scheduler.org/downloads

這個位址去下載下傳,下載下傳完後解壓即可,jar包什麼的都在裡面了。

Quartz JAR 檔案

Lib裡面的jar檔案都是Quartz需要的,把他們全部搞到你的classpath下吧。

配置檔案

配置檔案名為quartz.properties。這個配置檔案不是必須的。但是如果你需要使用超出基本功能的功能時,請使用它,它必須在你的classpath中。

War檔案中,你可以把它放在WEB-INF/classes檔案中。

配置石英排程器

要配置石英排程器,請把quartz.properties檔案放置到你的classpath下。

在examples/ 目錄裡面有幾個quartz.properties的例子。

下面的例子示範了配置檔案的寫法:

org.quartz.scheduler.instanceName = MyScheduler #指定了排程器名字

org.quartz.threadPool.threadCount = 3 #線程池最大線程數量

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #指定排程器使用ramjobstore的方式存儲任務,及任務存儲在記憶體中。

觀看全部的配置檔案說明請檢視 Quar Scheduler Configuration Guide

一個例子

下面是一個完整的例子包括了啟動排程器添加任務啟動和關閉。

QuartzTest.java

導入的包

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.*;

import static org.quartz.TriggerBuilder.*;

import static org.quartz.SimpleScheduleBuilder.*;

代碼示例

Thread.sleep(60000).

// define the job and tie it to our HelloJob class

JobDetail job = newJob(HelloJob.class)

.withIdentity("job1", "group1")

.build();

// Trigger the job to run now, and then repeat every 40 seconds

Trigger trigger = newTrigger()

.withIdentity("trigger1", "group1")

.startNow()

.withSchedule(simpleSchedule()

.withIntervalInSeconds(40)

.repeatForever())

.build();

// Tell quartz to schedule the job using our trigger

scheduler.scheduleJob(job, trigger);

觀看更多例子請移步 Quartz Scheduler Example Programs and CodeSamples

兩個資源檔案

quartz-2.2.1

http://download.csdn.net/detail/zhounanzhaode/8881313

getting start with quartz 原文

http://download.csdn.net/detail/zhounanzhaode/8881299