Quartz框架之触发器(3)

1 关于Quartz的触发器

Quartz框架中的触发器的主要功能就是指明何时该触发任务的执行, 触发器包含一系列的定义信息,开发人员可根据实际情形自定义对应的触发器。

  • triggerKey 用于分组管理触发器
  • JobKey 指明该触发的Job信息
  • startTime Job触发的时间
  • endTime 定时Job结束的时间
  • description 触发器的描述信息
  • JobDataMap 触发器存储的外部参数信息
  • priority 触发器的优先级 。当有多个触发器Qty触发任务时,用于执行任务的工作线程数N小于Qty时,意味着Quartz没有足够的资源立即调度所有的任务,设置触发器的优先级可以帮助调度器按照优先级先后触发任务的执行

Trigger接口是Quartz框架中关于触发器的接口,可通过TriggerBuilder类来实例化Trigger的实例信息。Quartz框架中主要分为两类触发器Simple Triggers 和 Cron Triggers.

2 Simple Trigger 和 Cron Trigger

2.1 Simple Trigger

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();

2.2 Cron Trigger

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表达式

3 触发器的Misfire机制

如果持久性触发器由于调度程序被关闭或因为 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

你可能感兴趣的:(quartz定时框架,java,quartz)