Job與JobDetail是Quartz用來定義具體任務的,而Trigger則是用來定義任務如何執行的。Quartz提供了Trigger接口來定義公共屬性,使用TriggerBuilder能夠建立具體類型的Trigger;最多見的兩種Trigger分別是SimpleTrigger、CronTrigger。java
package org.quartz; public interface Calendar { public boolean isTimeIncluded(long timeStamp); public long getNextIncludedTime(long timeStamp); }
這兩個方法都是精確到毫秒的;若是隻是排除以天爲單位的時間,可使用HolidayCalendar。
Calendars必須實例化,而後經過Scheduler的addCalendar()方法註冊。Calendars能夠重複使用,以下代碼:工具
Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity("trigger1", "test") .startAt(DateBuilder.futureDate(3, IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(5000) .withIntervalInSeconds(5) .withRepeatCount(5)) .modifiedByCalendar("holidayCalendar") .build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity("trigger2", "test") .startAt(DateBuilder.futureDate(3, IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(5000) .withIntervalInSeconds(5) .withRepeatCount(5)) .modifiedByCalendar("holidayCalendar") .build();
下面來看SimpleTrigger。經過以前的例子能夠看到如何建立Trigger,首先經過TriggerBuilder.newTrigger()方法創建一個TriggerBuilder對象,而後經過withSchedule()方法指定了SimpleScheduleBuilder,最後build()方法構建出了SimpleTrigger對象。
SimpleTrigger很簡單,以前例子中建立的都是SimpleTrigger,任務啓動後每隔5s運行一次,總共運行5次。Quartz提供了DateBuilder工具類來方便設置時間,裏面提供了不少方法,如上面Trigger2設置的啓動時間就是3秒後啓動任務。ui
CronTrigger使用cron表達式來設置觸發時間。CronTrigger建立方式:spa
Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity("cron trigger", "test") .withSchedule( //每5秒執行一次 CronScheduleBuilder.cronSchedule("0/5 * * ? * *") ).build();
cron表達式code
cron表達式的格式爲:秒 分 時 日 周 年;其中年是可選的,其它爲必填。
每一個屬性容許的值:對象
秒, 0-59;
分,0-59;
時,0-23;
日,1-31;
周 ,1-7;
年,可選,1970-2099
下面是cron表達式使用的一些符號:接口
「/」:指定增長值;好比上面的」0/5」,意思就是從第0秒開始,而後每隔5秒執行一次。
「*」:表示全部值;好比」5 * ? * *」,意思就是每一分鐘的第5秒執行一次。
「?」:沒有指定具體值,表示某月的某一天或者每週的某一天;只能在」日」和」周」上使用」?」,並且必須使用」?」;好比」5 * * ? * 「或」5 * * * ?」都是正確的且效果同樣,而」5 * * * * *」則是錯誤的。
「,」:表示多選;好比」1,2,3,5 * * ? * *」,意思就是每分鐘的第一、二、三、5秒執行一次任務。
「-「:表示範圍;好比」1-5 * * ? * *」,意思就是每分鐘的第1到5秒執行一次任務。
「L」:只容許在」日」和」周」上使用,分別有不一樣的做用;若是在」日」上使用,則表示該月的最後一天,如:1月31日;若是在」周」上使用,則意味着7或者SAT;另外,若是數字和L在」周」上組合使用則有其它含義,如:」6L」,則表明當前月的最後一個星期五。L用在」日」上還能夠指定偏移,如」L-3」,表示該月的第3天到最後一天。
「W」:表示給定日期最近的工做日,只能用在」日」上面;例如:」15W」,表示每個月15號最近的一個工做日,若是15號是週六,則在14號週五執行;若是15號是週日,則在16號週一執行。須要注意的是結合W使用時,不能使用範圍,只能使用單個值。另外W也能和L聯合使用,表示當月的最後一個工做日。
「#」:表示當月第幾個周X,只能在」周」上使用;如:」1#3」,表示當月的第3個星期一。get
下圖爲每一個屬性容許使用的符號:it