小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
1. Trigger简介
Trigger即触发器,在Quartz框架中支持多种类型的触发器
Trigger作为触发器顶层接口,其相关实现的层次结构:
2. Trigger下的四大触发器
- SimpleTrigger:简单任务触发器,时分秒轮询,类似java的timer
- 可设置触发时间、触发间隔、触发次数
- CalendarIntervalTrigger:基于日历扩展了SimpleTrigger,在时分秒基础上增加年月日轮询
- DailyTimeIntervalTrigger:可实现一定时间段内周期性执行任务
- 可设置每日执行,并设置任务触发的开始时间、结束时间、执行间隔
- 如:每天的8点-18点之间每半小时执行一次
- CronTrigger:使用字符串的cron表达式来定义触发器执行策略,cron是linux平台时间格式
- MutableTrigger:作为统一的触发器转换类型,以上四种触发器类都实现了该接口
- CoreTrigger:仅提供hasAdditionalProperties()方法,返回布尔值
四种触发器对应的建造者类型:
3. TriggerBuilder
触发器创建时采用了建造者模式
创建Trigger触发器时,通过建造者模式对应的TriggerBuilder类完成创建
// 创建触发器:触发器名、触发器组、触发器时间、触发器类型
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(TriggerKey.triggerKey(name,groupName))
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
- 首先采用静态方法newTrigger()创建一个TriggerBuilder实例对象,
- 并使用链式操作完成相关属性的设置
- 使用withIdentity()等方法添加触发器名称、分组等信息
- 使用startNow()/startAt/endAt等方法设置触发器触发时间
- 使用forJob()等方法设置触发器关联任务
- 使用withSchedule(ScheduleBuilder schedBuilder)设置当前触发器对象的建造者对象,默认是
SimpleScheduleBuilder类型,创建SimpleTrigger对象 - 使用modifiedByCalendar()设置Quartz中的日历对象
- 最后使用build()方法创建Trigger对象。
- build()方法中,如果没有设置触发器建造者,会默认创建一个SimpleScheduleBuilder类的建造者对象
- 然后通过触发器建造者对象的build()方法创建一个具体的触发器对象,并将对象以MutableTrigger类型返回
- MutableTrigger类型作为中间类型,四种触发器对象统一转成MutableTrigger类型返回,并在接收时转为对应类型
- 触发器创建完成后,会将当前建造者对象的配置属性设置给触发器对象
- 最后返回创建好的触发器对象,可以使用具体类型或Trigger类型接收
//build()完成触发器的最终创建
public T build() {
if (this.scheduleBuilder == null) {
this.scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
}
MutableTrigger trig = this.scheduleBuilder.build();
trig.setCalendarName(this.calendarName);
trig.setDescription(this.description);
trig.setStartTime(this.startTime);
trig.setEndTime(this.endTime);
if (this.key == null) {
this.key = new TriggerKey(Key.createUniqueName((String)null), (String)null);
}
trig.setKey(this.key);
if (this.jobKey != null) {
trig.setJobKey(this.jobKey);
}
trig.setPriority(this.priority);
if (!this.jobDataMap.isEmpty()) {
trig.setJobDataMap(this.jobDataMap);
}
return trig;
}