美文网首页
2. Quartz 调度核心组件之触发器

2. Quartz 调度核心组件之触发器

作者: 农民工进城 | 来源:发表于2023-01-14 23:37 被阅读0次

    本文要点

    • 1.触发器
    • 2.触发器种类
    • 3.核心方法介绍

    2.1 触发器(Trigger):

    触发器:用于定义任务调度执行规则

    image.png

    Trigger 主要有四种:

    • 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次,然后恢复到原有的调度频率

    相关文章

      网友评论

          本文标题:2. Quartz 调度核心组件之触发器

          本文链接:https://www.haomeiwen.com/subject/ytvocdtx.html