Quartz框架中的触发器的主要功能就是指明何时该触发任务的执行, 触发器包含一系列的定义信息,开发人员可根据实际情形自定义对应的触发器。
Trigger接口是Quartz框架中关于触发器的接口,可通过TriggerBuilder类来实例化Trigger的实例信息。Quartz框架中主要分为两类触发器Simple Triggers 和 Cron Triggers.
Simple Trigger的应用场景通常是在特定时间时刻执行一次,或者在特定时间点执行,然后按特定时间间隔重复。因此 Simple Trigger 通常包含开始时间和结束时间、重复计数和重复间隔属性。Simple Trigger 的实例通常使用TriggerBuilder 和SimpleScheduleBuilder 来创建。
Simple Trigger的使用实例代码如下
立即执行,间隔5秒钟执行一次
//newTrigger()是由TriggerBuilder 提供的静态方法
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build();
立即执行,间隔5分钟执行一次,截止时间为22:00
trigger = newTrigger()
.withIdentity("trigger2", "group1")
.withSchedule(simpleSchedule()
.withIntervalInMinutes(5)
.repeatForever())
.endAt(dateOf(22, 0, 0))
.build();
8点开始开始执行,间隔10秒钟执行一次,重复10次
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.startAt(dateOf(8, 0, 0))
.withSchedule(simpleSchedule()
.withIntervalInSeconds(10)
.withRepeatCount(10))
.build();
Cron Trigger相较于Simple Trigger而言,能够更加灵活的定义触发机制,比如每周一的早上九点
每天的8点至17点间隔两分钟执行一次。
trigger = newTrigger()
.withIdentity("trigger4", "group1")
.withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
.forJob("myJob", "group1")
.build();
每天10:42执行。
trigger = newTrigger()
.withIdentity("trigger5", "group1")
.withSchedule(dailyAtHourAndMinute(10, 42))
.forJob(myJobKey)
.build();
关于cron表达式的学习,可以参考我的上一篇文章cron表达式
如果持久性触发器由于调度程序被关闭或因为 Quartz 的线程池中没有可用于执行作业的线程而“错过”其触发时间,则会发生失火。不同的触发器类型有不同的失火指令可供使用。默认情况下,它们使用“智能策略”指令 - 该指令具有基于触发器类型和配置的动态行为。当计划程序启动时,它会搜索任何已触发错误的持久性触发器,然后根据其单独配置的错误触发指令更新每个触发器。
Simple Trigger的Misfire机制信息包含以下几种【常量】
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
Cron Trigger 的Misfire机制信息包含以下几种【常量】
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_DO_NOTHING
MISFIRE_INSTRUCTION_FIRE_NOW