本文要点
- 1.触发器
- 2.触发器种类
- 3.核心方法介绍
2.1 触发器(Trigger):
触发器:用于定义任务调度执行规则
image.pngTrigger 主要有四种:
- SimpleTrigger :构造器为SimpleScheduleBuilder,支持简单的频率调用的Trigger
- CronTrigger:构造器为CronScheduleBuilder,支持cron表达式的
- TriggerDailyTimeIntervalTrigger:构造器为DailyTimeIntervalScheduleBuilder,设置以周为单位固定频率调度
- CalendarIntervalTrigger:构造器为CalendarIntervalScheduleBuilder,支持基于日历周期的Trigger
2.2 Trigger的构造器
2.2.1 SimpleScheduleBuilder
设置频率方法:
- withIntervalInMilliseconds(long intervalInMillis):以毫秒为单位设置重复调度时间间隔
- withIntervalInSeconds(int intervalInSeconds):以秒为单位设置重复调度时间间隔
- withIntervalInMinutes(int intervalInMinutes) :以分钟为单位设置重复调度时间间隔
- withIntervalInHours(int intervalInHours) :以小时为单位指定重复调度时间间隔
设置调度次数相关方法:
- withRepeatCount(int triggerRepeatCount) :设置重复调度次数
- repeatForever():永不过期,重复调度
设置调度机会错失之后的补救策略
- MISFIRE_INSTRUCTION_SMART_POLICY:默认值,会出发trigger的updateAfterMisfire方法
- withMisfireHandlingInstructionIgnoreMisfires():设置为MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY,忽略错失调度,一旦有机会,就会先尝试调度失去的次数,再按原有的频率进行调度,例如:5秒调度一次,60秒后,一旦有机会进行调度,则可能连续调度12次,然后恢复到原有的调度频率
- withMisfireHandlingInstructionFireNow():设置为MISFIRE_INSTRUCTION_FIRE_NOW,一旦错失调度机会,立即由Scheduler进行出发,只适用于非重复调度的Trigger,如果是重复调度的Trigger,则和MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT一样
- withMisfireHandlingInstructionNextWithExistingCount() :设置为MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT,如果错失调度机会,则下个调度时间点执行,但是次数不会改变,如果到达调度结束时间,则状态直接设置为完成
- withMisfireHandlingInstructionNextWithRemainingCount():设置为MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT,如果错失调度机会,则下个调度时间点执行,但是次数会设置为剩余次数,如果到达调度结束时间,则状态直接设置为完成
- withMisfireHandlingInstructionNowWithExistingCount():设置为MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT,一旦有机会调度,就会执行调度,直到执行完剩余的次数;但是如果当前的时间已经超过预期的entTime则不会调度。
- withMisfireHandlingInstructionNowWithRemainingCount() :设置为MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT,一旦有机会调度,就会执行剩余的调度次数,执行完设置的次数;但是如果当前的时间已经超过预期的entTime则不会调度。
2.2.2 CronScheduleBuilder
设置频率方法:
- cronSchedule(String cronExpression) :根据cron表达式设置调度频率
- atHourAndMinuteOnGivenDaysOfWeek(
int hour, int minute, Integer... daysOfWeek):根据小时、分钟、周几等参数生成一个cron表达式 - dailyAtHourAndMinute(int hour, int minute):根据参数小时、分钟生成一个cron表达式
- weeklyOnDayAndHourAndMinute( int dayOfWeek, int hour, int minute):根据小时、分钟、周几等参数生成一个cron表达式
- monthlyOnDayAndHourAndMinute( int dayOfMonth, int hour, int minute) :根据几号、小时、分钟等参数生成一个cron表达式
设置调度机会错失之后的补救策略
- withMisfireHandlingInstructionDoNothing():设置为MISFIRE_INSTRUCTION_DO_NOTHING,直接忽略等待下次执行
- withMisfireHandlingInstructionFireAndProceed():设置为MISFIRE_INSTRUCTION_FIRE_ONCE_NOW,错失良机,则立即执行
- withMisfireHandlingInstructionIgnoreMisfires():设置为MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY,忽略错失调度,一旦有机会,就会先尝试调度失去的次数,再按原有的频率进行调度,例如:5秒调度一次,60秒后,一旦有机会进行调度,则可能连续调度12次,然后恢复到原有的调度频率
2.2.3 DailyTimeIntervalScheduleBuilder
2.2.4 CalendarIntervalScheduleBuilder
设置频率方法:
CalendarIntervalTrigger 相比于***SimpleScheduleBuilder ***添加了日、周、月、年的周期维度。
- withIntervalInDays(int intervalInDays) :以天为单位设置重复调度时间间隔
- withIntervalInWeeks(int intervalInWeeks):以周为单位设置重复调度时间间隔
- withIntervalInMonths(int intervalInMonths) :以月为单位设置重复调度时间间隔
- withIntervalInYears(int intervalInYears) :以年为单位设置重复调度时间间隔
- withInterval(int timeInterval, IntervalUnit unit):设置周期间隔与单位
设置调度机会错失之后的补救策略
- withMisfireHandlingInstructionDoNothing():设置为MISFIRE_INSTRUCTION_DO_NOTHING,直接忽略等待下次执行
- withMisfireHandlingInstructionFireAndProceed():设置为MISFIRE_INSTRUCTION_FIRE_ONCE_NOW,错失良机,则立即执行
- withMisfireHandlingInstructionIgnoreMisfires():设置为MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY,忽略错失调度,一旦有机会,就会先尝试调度失去的次数,再按原有的频率进行调度,例如:5秒调度一次,60秒后,一旦有机会进行调度,则可能连续调度12次,然后恢复到原有的调度频率
网友评论