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