[译]Java定时任务调度-Quartz文档(五)SimpleTrigger
2017-03-24 13:41
225 查看
Simple Trigger
Simple Trigger一般适用在某个时间点执行任务,或者从某个时间点开始以固定间隔的时间窗口重复执行某任务。例如,如果你想在2015年2月13号上午11:23:54秒启动触发器,或者从这个时间点启动,并以10秒为间隔,重复执行五次。通过以上描述,SimpleTrigger的一些属性就显而易见了:开始时间、结束时间、重复次数和重复间隔。这些属性义如其名,只需要稍微注意一下结束时间这个属性即可。
重复次数的取值可以是0、整数或者常数SimpleTrigger.REPEAT_INDEFINITELY。重复间隔必须是0或者正的long类型,单位是毫秒。注意,当时间间隔为0时,’repeat count’次的任务会以并发的形式同时执行。
如果你对Quartz的DateBuilder类不是很熟悉,最好根据开始时间或者结束时间先计算好trigger的启动次数。
结束时间这个属性会影响到重复次数这个属性。这一点应用在诸如【启动一个每10秒执行一次的任务,但是在一个固定的时间点终止】这类的任务,这样做就不用根据开始时间、结束时间和时间间隔来计算执行次数了,设定了结束时间后,可以将repeat count设置为REPEAT_INDEFINITELY(你甚至可以将repeat count设置为一个超大的数,以保证在end time之前,绝对不会执行完)。
SimpleTrigger实例通常是通过TriggerBuilder或者SimpleScheduleBuilder创建的。要通过DSL-style来使用这些builder,可以引入如下内容:
import static org.quartz.TriggerBuilder.*; import static org.quartz.SimpleScheduleBuilder.*; import static org.quartz.DateBuilder.*:
下面的例子介绍了多种定义方式,每种都有些许不同:
创建一个特定时间点的trigger,无重复执行:
SimpleTrigger trigger = (SimpleTrigger) newTrigger() .withIdentity("trigger1", "group1") .startAt(myStartTime) // some Date .forJob("job1", "group1") // identify job with name, group strings .build();
创建一个特定时间点的trigger,每十秒执行一次:
trigger = newTrigger() .withIdentity("trigger3", "group1") .startAt(myTimeToStartFiring) // if a start time is not given (if this line were omitted), "now" is implied .withSchedule(simpleSchedule() .withIntervalInSeconds(10) .withRepeatCount(10)) // note that 10 repeats will give a total of 11 firings .forJob(myJob) // identify job with handle to its JobDetail itself .build();
创建一个trigger,五分钟后执行一次:
trigger = (SimpleTrigger) newTrigger() .withIdentity("trigger5", "group1") .startAt(futureDate(5, IntervalUnit.MINUTE)) // use DateBuilder to create a date in the future .forJob(myJobKey) // identify job with its JobKey .build();
创建一个trigger,并立即执行,然后每五分钟执行一次,直到22:00:
trigger = newTrigger() .withIdentity("trigger7", "group1") .withSchedule(simpleSchedule() .withIntervalInMinutes(5) .repeatForever()) .endAt(dateOf(22, 0, 0)) .build();
创建一个trigger,在下个整点执行,并每两个小时执行一次,永远重复下去:
trigger = newTrigger() .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00")) .withSchedule(simpleSchedule() .withIntervalInHours(2) .repeatForever()) // note that in this example, 'forJob(..)' is not called // - which is valid if the trigger is passed to the scheduler along with the job .build(); scheduler.scheduleJob(trigger, job);
你应该花些时间看看TriggerBuilder 和 SimpleScheduleBuilder的所有方法,以便熟悉除了上面提到的之外的方法。
注意,如果某些属性你没有指定值,那么Quartz会为你制定一个默认值。例如,如果没有调用withIdentity,那么Quartz会随机为你的trigger生成一个名字,如果没有调用startAt,那么Quartz会以当前时间最为开始时间。
SimpleTrigger Misfire Instructions
SimpleTrigger定义了一些指令,用来指定“错过调用”时Quartz应该如何做。这些指令被定义为SimpleTrigger类中的一些常量,包括:MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY MISFIRE_INSTRUCTION_FIRE_NOW MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT
之前提到过,所有的trigger类型都有Trigger.MISFIRE_INSTRUCTION_SMART_POLICY
,但是对于不同的类型,这个指令的行为有所不同。
如果使用了‘smart policy’,SimpleTrigger会根据给定SimpleTrigger实例的配置和状态动态的选择指令,JavaDoc中的SimpleTrigger.updateAfterMisfire()方法介绍了这个动态选择行为的细节。
在创建SimpleTriggers时,可以通过SimpleSchedulerBuilder来指定misfire instruction作为调度的一部分。如下所示:
trigger = newTrigger() .withIdentity("trigger7", "group1") .withSchedule(simpleSchedule() .withIntervalInMinutes(5) .repeatForever() .withMisfireHandlingInstructionNextWithExistingCount()) .build();
原文链接:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-05.html
相关文章推荐
- [译]Java定时任务调度-Quartz文档(二)Quartz API、Job & Scheduler
- [译]Java定时任务调度-Quartz文档(六)CronTrigger
- [译]Java定时任务调度-Quartz文档(三)进一步讲讲Job和Job Detail
- [译]Java定时任务调度-Quartz文档(四)More About Triggers
- Java定时任务调度工具详解(6)— Quartz 之 SimpleTrigger、CronTrigger、Cron表达式
- [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory
- [译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners
- [译]Java定时任务调度-Quartz文档(十二)Miscellaneous Features of Quartz
- [译]Java定时任务调度-Quartz文档(八)SchedulerListeners
- [译]Java定时任务调度-Quartz文档(十一)Advanced (Enterprise) Features
- [译]Java定时任务调度-Quartz文档(九)Job Stores
- [译]Java定时任务调度-Quartz文档(一)初步使用
- java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片
- Java作业调度/定时任务 Spring和Quartz整合
- java定时任务调度工具-quartz
- java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
- Java定时任务调度之Quartz
- java框架源码之Quartz(1):定时任务如何调度
- Quartz---Java定时任务调度工具