quartz關鍵介面和基本使用

關鍵介面

1) Scheduler

- 與排程程式互動的主要API。

2) Job

- 由希望由排程程式執行的元件實現的介面。

3) JobDetail

- 用於定義作業的例項。

4) Trigger

(即觸發器) - 定義執行給定作業的計劃的元件。

5) JobBuilder

- 用於定義/構建 JobDetail 例項,用於定義作業的例項。

6) TriggerBuilder

- 用於定義/構建觸發器例項。

7) SchedulerBuilder(SimpleSchedulerBuilder、CronScheduleBuilder)

介面的各種實現類,可以定義不同型別的排程計劃(schedule)。Scheduler的生命期,從 SchedulerFactory 建立它時開始,到 Scheduler 呼叫shutdown() 方法時結束;Scheduler 被建立後,可以增加、刪除和列舉 Job 和 Trigger,以及執行其它與排程相關的操作(如暫停 Trigger)。但是,Scheduler只有在呼叫start()方法後,才會真正地觸發 trigger(即執行 job)。

8) DateBuilder

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

9) JobDataMap

給job例項增加屬性或配置,在job的多次執行中,跟蹤job的狀態,JobDataMap是JobDetail物件的一部分。JobDataMap中可以包含不限量的(序列化的)資料物件,在job例項執行的時候,可以使用其中的資料;JobDataMap是Java Map介面的一個實現,額外增加了一些便於存取基本型別的資料的方法。

建立簡單的定時任務

1、quartz.properties配置

#此排程程式的名稱將為MySchedulerorg。quartz。scheduler。instanceName = MyScheduler#執行緒池中有3個執行緒,這意味著最多可以同時執行3個joborg。quartz。threadPool。threadCount = 3#quartz的所有資料,包括job和trigger的配置,都會儲存在記憶體中(而不是資料庫裡)org。quartz。jobStore。class = org。quartz。simpl。RAMJobStore

2、實現job介面的任務

public class HelloJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System。out。println(“執行任務。。。。”); }}

3、測試

@org。junit。Testpublic void test1() throws Exception { // 建立任務排程器 Scheduler scheduler = StdSchedulerFactory。getDefaultScheduler(); scheduler。start(); // 建立jobDetail JobDetail jobDetail = JobBuilder。newJob(HelloJob。class) 。withIdentity(“job01”, “group01”) 。build(); //建立任務觸發器 Trigger trigger = TriggerBuilder。newTrigger() 。withIdentity(“trigger01”, “group01”) 。startNow() 。withSchedule(SimpleScheduleBuilder。simpleSchedule()。withIntervalInSeconds(3)。repeatForever())//3秒永遠迴圈執行 。build(); // 將任務交給排程器,排程器按trigger配置的指標執行任務 scheduler。scheduleJob(jobDetail, trigger); //scheduler。shutdown(); //讓主執行緒等待 System。in。read();}

建立Cron表示式定時任務

1、配置quartz.properties

#此排程程式的名稱將為MySchedulerorg。quartz。scheduler。instanceName = MyScheduler#執行緒池中有3個執行緒,這意味著最多可以同時執行3個joborg。quartz。threadPool。threadCount = 3#quartz的所有資料,包括job和trigger的配置,都會儲存在記憶體中(而不是資料庫裡)org。quartz。jobStore。class = org。quartz。simpl。RAMJobStore

2、實現job介面的任務

public class HelloJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System。out。println(“cron任務執行。。。。”); }}

3、測試

@org。junit。Testpublic void test1() throws Exception { // 建立任務排程器 Scheduler scheduler = StdSchedulerFactory。getDefaultScheduler(); scheduler。start(); // 建立jobDetail JobDetail jobDetail = JobBuilder。newJob(HelloJob。class) 。withIdentity(“job01”, “group01”) 。build(); //建立任務觸發器 Trigger trigger = TriggerBuilder。newTrigger() 。withIdentity(“trigger01”, “group01”) 。withSchedule(CronScheduleBuilder。cronSchedule(“0/2 * * * * ?”))//每隔兩秒執行一次 。build(); // 將任務交給排程器,排程器按trigger配置的指標執行任務 scheduler。scheduleJob(jobDetail, trigger); //scheduler。shutdown(); //讓主執行緒等待 System。in。read();}

cron表示式

格式

Cron表示式是一個字串,字串以5或6個空格隔開,分為6或7個域,每一個域代表一個含義,Cron有如下兩種語法格式:(1)Seconds Minutes Hours DayofMonth Month DayofWeek Year(2)Seconds Minutes Hours DayofMonth Month DayofWeek

格式圖解

quartz關鍵介面和基本使用

cron表示式圖解

說明:

欄位

允許值

允許的特殊字元

秒(Seconds)

0~59的整數

, - * / 四個字元

分(Minutes)

0~59的整數

, - * / 四個字元

小時(Hours)

0~23的整數

, - * / 四個字元

日期(DayofMonth)

1~31的整數(但是你需要考慮你月的天數)

,- * ? / L W C八個字元

月份(Month)

1~12的整數或者 JAN-DEC

, - * / 四個字元

星期(DayofWeek)

1~7的整數或者 SUN-SAT (1=SUN)

, - * ? / L C # 八個字元

年(可選,留空)(Year)

1970~2099

, - * / 四個字元

cron表示式例項

表示式

說明

0 0 12 * * ?

每天中午12點觸發

0 15 10 ? * *

每天上午10:15觸發

0 * 14 * * ?

在每天下午2點到下午2:59期間的每1分鐘觸發

0 15 10 ? * MON-FRI

週一至週五的上午10:15觸發

0 0 10,14,16 * * ?

每天上午10點,下午2點,4點

0 0/30 9-17 * * ?

朝九晚五工作時間內每半小時

0 15 10 ? * 6L

每月的最後一個星期五上午10:15觸發

0 0 12 ? * WED

表示每個星期三中午12點

0 15 10 ? * 6#3

每月的第三個星期五上午10:15觸發

0 15 10 ? * 6L 2002-2005

2002年至2005年的每月的最後一個星期五上午10:15觸發