Trigger最常用的有两种SimpleTrigger和CronTrigger,首先介绍Trigger的一些基础的信息,然后会详细描述这两种Trigger。

1. 通用Trigger属性

quartz中所有的触发器Trigger都有一些共有属性,如TriggerKey,startTime等,这些属性可以使用TriggerBuilder进行设置。常用的属性举例如下:

(1) triggerKey:触发器的标识,由名称与分组唯一指定,便于调度器调用与查找。

(2) jobKey: 当触发器被触发时,标识哪一个任务Job应该被执行。

(3) startTime: 表示触发器第一次开始触发的时间。

(4) endTime: 表示触发器终止触发的时间。

2. 优先级

当存在多个触发器时,quartz可能没有足够的资源立即触发所有配置为同一时间触发的triggers,因此可以设置每个Trigger的优先级。默认的优先级为5,可取任意的整型值,包括正数或负数。注意优先级仅用于所有相同时间触发的triggers

3. 未启动指令"Misfire  Instructions"

Trigger未触发一般产生于调度器被关闭,或线程池不足时。不同的Trigger类型有不同的未启动指令。默认的,他们会使用"smart policy"指定。这些指令的使用场景在于,当scheduler开启时,它将搜索所有未启动的持久化的触发器,然后基于触发器各自配置"未启动指令"来更新触发器。未启动指令用于当trigger未正常触发时,是否恢复执行的场景。

4. Calendars

与Trigger关联的Calendar对象,用于在指定的时间内不触发trigger,例如你有一个任务每天执行一次,但你不希望在节假日执行时,Calendar此时派上用场。注意此Calendar为quartz自身的定义接口,而非Java自带的Calendar。

Calendar需要在Scheduler定义过程中,通过scheduler.addCalendar()进行初始化和注册。

示例:

import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
Trigger t = newTrigger()
    .withIdentity("myTrigger")
    .forJob("myJob")
    .withSchedule(dailyAtHourAndMinute(9, 30)) // execute job daily at 9:30
    .modifiedByCalendar("myHolidays") // but not on holidays
    .build();

// .. schedule job with trigger

Trigger t2 = newTrigger()
    .withIdentity("myTrigger2")
    .forJob("myJob2")
    .withSchedule(dailyAtHourAndMinute(11, 30)) // execute job daily at 11:30
    .modifiedByCalendar("myHolidays") // but not on holidays
    .build();

// .. schedule job with trigger2
View Code

相关文章:

  • 2021-05-19
  • 2021-07-19
  • 2022-12-23
  • 2021-10-07
  • 2021-08-12
  • 2021-12-20
  • 2022-12-23
猜你喜欢
  • 2021-10-25
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2021-08-21
  • 2021-06-21
相关资源
相似解决方案