前面咱们提到 Quartz 中四种类型的 Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger, 和 NthIncludedDayTrigger。crontab
SimpleTrigger 通常用于实现每隔必定时间执行任务,以及重复多少次,如每 2 小时执行一次,重复执行 5 次。SimpleTrigger 内部实现机制是经过计算间隔时间来计算下次的执行时间,这就致使其不适合调度定时的任务。例如咱们想天天的 1:00AM 执行任务,若是使用 SimpleTrigger 的话间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务而且恢复执行时,该执行时间是随机的(取决于什么时候执行 misfired 的任务,例如某天的 3:00PM)。这会致使以后天天的执行时间都会变成 3:00PM,而不是咱们原来指望的 1:00AM。im
CronTirgger 相似于 LINUX 上的任务调度命令 crontab,即利用一个包含 7 个字段的表达式来表示时间调度方式。例如,"0 15 10 * * ? *" 表示天天的 10:15AM 执行任务。对于涉及到星期和月份的调度,CronTirgger 是最适合的,甚至某些状况下是惟一选择。例如,"0 10 14 ? 3 WED" 表示三月份的每一个星期三的下午 14:10PM 执行任务。读者能够在具体用到该 trigger 时再详细了解每一个字段的含义。项目
DateIntervalTrigger 是 Quartz 1.7 以后的版本加入的,其最适合调度相似每 N(1, 2, 3...)小时,每 N 天,每 N 周等的任务。虽然 SimpleTrigger 也能实现相似的任务,可是 DateIntervalTrigger 不会受到咱们上面说到的 misfired 任务的影响。另外,DateIntervalTrigger 也不会受到 DST(Daylight Saving Time, 即中国的夏令时)调整的影响。笔者就曾经由于该缘由将项目中的 SimpleTrigger 改成了 DateIntervalTrigger,由于若是使用 SimpleTrigger,原本设定的调度时间就会因为 DST 的调整而提早或延迟一个小时,而 DateIntervalTrigger 不会受此影响。tab
NthIncludedDayTrigger 的用途比较简单明确,即用于每隔一个周期的第几天调度任务,例如,每月的第 3 天执行指定的任务。时间