Trigger 也有很多类型,最常见的有两种 trigger 分别在后面教程中分别介绍
Trigger 的公共属性
所有类型的 trigger 都有 Trigger 这个属性,表示 trigger 的身份;除此之外,trigger 还有很多其他公共属性。这些属性,在构建 trigger 的时候可以通过 TriggerBuilder 设置。
trigger 的公共属性
属性名称 | 介绍 |
---|---|
jobKey | 当 trigger 触发时被执行的 job 的身份 |
startTime | 设置 trigger 第一次触发的时间;该属性的值是 java.util.Date 类型,表示某个指定的时间点 |
endTime | 表示 trigger 失效的时间点 |
优先级
如果你的 trigger 很多,Quartz 可能没有足够的资源同时触发所有 trigger;这种情况下米可能希望控制哪些 trigger 优先使用 Quartz 的工作线程,要达到该目的,你可以在 trigger 上设置 prioriry 属性。
注意:只有同时触发 trigger 之间才会比较优先级。如果 trigger 是可恢复的,在恢复后在调用,优先级与原先 trigger 是一样的。
错过触发(misfire)
tirgger 还有一个重要的属性 misfire;如果 scheduler 关闭了,或者 Quartz 线程池中没有可用的线程来执行 job,此时持久性的 trigger 就会错过(miss) 其触发时间,及错过触发(missfire)。不同类型的 trigger,有不同的 missfire 机制,他们都默认使用“智能机制”(smart policy),即根据 trigger 的类型和配置动态调整行为。当 scheduler 启动的时候,查询所有错过触发的持久性 trigger。然后根据他们各自的 misfire 机制更新 trigger 信息。
日历(calendar)
Quartz 的 calendar 对象可以在定义和存储 trigger 的时候与 trigger 进行关联。Calendar 用于从 trigger 的调度计划中排除时间段,比如,可以创建 trigger,每个工作日志的上午 9.30 执行,然后增加一个 Calendar,排除掉所有商业节日。
HolidayCalendar cal = new HolidayCalendar();
cal.addExcludedDate( someDate );
cal.addExcludedDate( someOtherDate );
sched.addCalendar("myHolidays", cal, false);
Trigger t = newTrigger()
.withIdentity("myTrigger")
.forJob("myJob")
.withSchedule(dailyAtHourAndMinute(, )) // execute job daily at :
.modifiedByCalendar("myHolidays") // but not on holidays
.build();
// .. schedule job with trigger
Trigger t2 = newTrigger()
.withIdentity("myTrigger2")
.forJob("myJob2")
.withSchedule(dailyAtHourAndMinute(, )) // execute job daily at :
.modifiedByCalendar("myHolidays") // but not on holidays
.build();