quartz定時器工具

一次工做的時候有用到。正好把以前作的一些記錄也貼出了作個總結好了。 spa

1.quartz核心接口

Scheduler 調度器、Job、JobDetail、Trigger、JobDataMap


2.Scheduler 

1.這個 Scheduler 的實現,其實是一個代理,對其中方法調用會傳遞到 QuartzScheduler 實例上
2.SchedulerFactory實例化
3.org.quartz.impl.DirectoSchedulerFactory  
  org.quartz.impl.StdSchedulerFactory
StdSchedulerFactory會加載類路徑下的quartz.properties 文件
4.一旦scheduler被關閉(shutdown),則它不能再從新啓動,除非從新實例化它


3.job

1.public interface Job { void execute(JobExecutionContext context) throws JobExecutionException; }
2.StatefulJob在任務的每次執行以後從新存儲JobDataMap

4.JobDetail

1.JobDetail對象由Quartz客戶端在Job被加入到scheduler時建立。它包含了Job的各類設置屬性以及一個JobDataMap對象,這個對象被用來存儲給定Job類實例的狀態信息。

2.每次scheduler執行這個任務時,它就建立這個類的新實例,而後調用該實例的execute(..)方法。

3.JobDataMap
JobDetail.getJobDataMap().put("jobSays", "Hello World!"); 
JobExecutionContext.getJobDetail().getJobDataMap(); 
Trigger.getJobDataMap();
JobExecutionContext.getMergedJobDataMap(); 

5.Trigger

1.Trigger對象被用來觸發jobs的執行。

2.經常使用的Trigger類是SimpleTrigger和CronTrigger。

3.SimpleTrigger
SimpleTrigger用來觸發只需執行一次或者在給定時間觸發而且重複N次且每次執行延遲必定時間的任務。

4.CronTriggers
像日曆那樣按日程來觸發任務

5.TriggerUtils
提供了許多便捷的方法簡化了構造和配置 trigger
public static Trigger makeSecondlyTrigger(int intervalInSeconds);
public static Trigger makeDailyTrigger(int hour, int minute);
public static Trigger makeWeeklyTrigger(int dayOfWeek, int hour, int minute);
public static Trigger makeMonthlyTrigger(int dayOfMonth, int hour, int minute);
public static Date getNextGivenMinuteDate(Date date, int minuteBase);
public static Date getEvenMinuteDate(Date date);

6.Listeners

1.TriggerListeners和JobListeners 
監聽器是在scheduler事件發生時可以執行動做的對象。
TriggerListeners接收與triggers相關的事件
JobListeners則接收與Job相關的事件。

2.註冊
監聽器而後在執行的時候註冊到scheduler
聽器能夠被註冊爲「全局」的或者「非全局」

全局:scheduler.addGlobalJobListener(jobListener);   

非全局scheduler.addJobListener(jobListener);    
 jobDetail.addJobListener(jobListener.getName());  

3.SchedulerListeners
只接收與特定trigger 或job無關的Scheduler自身事件通知

4.jobListener的方法:
jobToBeExecuted() 方法

Scheduler 在 JobDetail 將要被執行時調用這個方法。

·jobExecutionVetoed() 方法

Scheduler 在 JobDetail 即將被執行,但又被 TriggerListener 否決了時調用這個方法。

·jobWasExecuted() 方法

Scheduler 在 JobDetail 被執行以後調用這個方法。

5.TriggerListener
·getName() 方法

和前面的 JobListener 同樣,TriggerListner 接口的 getName() 返回一個字符串用以說明監聽器的名稱。對於非全局的 TriggerListener,在 addTriggerListener() 方法中給定的名稱必須與監聽器的 getName() 方法返回值相匹配。

·triggerFired() 方法

當與監聽器相關聯的 Trigger 被觸發,Job 上的 execute() 方法將要被執行時,Scheduler 就調用這個方法。在全局 TriggerListener 狀況下,這個方法爲全部 Trigger 被調用。

·vetoJobExecution() 方法

在 Trigger 觸發後,Job 將要被執行時由 Scheduler 調用這個方法。TriggerListener 給了一個選擇去否決 Job 的執行。假如這個方法返回 true,這個 Job 將不會爲這次 Trigger 觸發而獲得執行。

·triggerMisfired() 方法

Scheduler 調用這個方法是在 Trigger 錯過觸發時。如這個方法的 JavaDoc 所指出的,你應該關注此方法中持續時間長的邏輯:在出現許多錯過觸發的 Trigger 時,長邏輯會致使骨牌效應。你應當保持這上方法儘可能的小。

·triggerComplete() 方法

Trigger 被觸發而且完成了 Job 的執行時,Scheduler 調用這個方法。這不是說這個 Trigger 將再也不觸發了,而僅僅是當前 Trigger 的觸發(而且緊接着的 Job 執行) 結束時。這個 Trigger 也許還要在未來觸發屢次的。

7.SchedulerPlugin插件

1.Quartz提供了一個接口(org.quartz.spi.SchedulerPlugin)來插入附加的功能。

2.public interface SchedulerPlugin {
 public void initialize(String name, Scheduler scheduler) throws SchedulerException;
 public void start();
 public void shutdown();
}

8.Quartz cron 

1.
表 5.1. Quartz Cron 表達式支持到七個域
名稱 是否必須 容許值 特殊字符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W C
1-12 或 JAN-DEC , - * /
1-7 或 SUN-SAT , - * ? / L C #
空 或 1970-2099 , - * /

2.星號

使用星號(*) 指示着你想在這個域上包含全部合法的值。例如,在月份域上使用星號意味着每月都會觸發這個 trigger。

3.問號

? 號只能用在周域上,可是不能在這兩個域上同時使用。你能夠認爲 ? 字符是 "我並不關心在該域上是什麼值。" 這不一樣於星號,星號是指示着該域上的每個值。? 是說不爲該域指定值。

4., 逗號

逗號 (,) 是用來在給某個域上指定一個值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒觸發一個 trigger。

5./ 斜槓

斜槓 (/) 是用於時間表的遞增的。咱們剛剛用了逗號來表示每15分鐘的遞增,可是咱們也能寫成這樣 0/15

6.- 中劃線

中劃線 (-) 用於指定一個範圍。例如,在小時域上的 3-8 意味着 "3,4,5,6,7 和 8 點。"  域的值不容許回捲,因此像 50-10 這樣的值是不容許的。

7.L 說明了某域上容許的最後一個值。它僅被域支持。當用在日域上,表示的是在域上指定的月份的最後一天。例如,當月域上指定了 JAN 時,在域上的 L 會促使 trigger 在1月31號被觸發。

8.W 字母

W 字符表明着平日 (Mon-Fri),而且僅能用於日域中。它用來指定離指定日的最近的一個平日

9.# 井號

# 字符僅能用於域中。它用於指定月份中的第幾周的哪一天。例如,若是你指定周域的值爲 6#3,它意思是某月的第三個週五 (6=星期五,#3意味着月份中的第三週)。
相關文章
相關標籤/搜索