天天看点

Quartz Concept

  1. 如果你认为Job是Quartz的主角,一定要转变思路,Trigger才是
  2. 一个Scheduler对象,就是一个Quartz实例,一组数据库表

Job & JobDetail

  1. Job JobDetails,一个JobDtail对象才是一个任务实例,包含执行的动作Job对象和Job相关属性,比如JobDetails#JobDataMap;
  2. 一个job可以被多个Trigger关联,但是一个tigger只能关联一个job
  3. JobExecutionContext中的JobDataMap是JobDetail中的JobDataMap和Trigger中的JobDataMap的集合;如果有相同key,后者覆盖前者;

Trigger

CalendarIntervalTrigger + CronTrigger + DailyTimeIntervalTrigger + SimpleTrigger

Trigger存储:

qrtz_triggers

qrtz_blob_triggers自定义Trigger

qrtz_cron_triggers

qrtz_simple_trigger

qrtz_simprop_trigger

qrtz_fired_trigger

qrtz_paused_trigger_grps存放暂停掉的触发器

SimpleTrigger实例通过TriggerBuilder设置主要的属性,通过SimpleScheduleBuilder设置与SimpleTrigger相关的属性。要使用这些builder的静态方法,需要静态导入,其他类型的Trigger一样,注意比较4. Quartz就定义了四种类型的Trigger,搞定就行了

Trigger的状态机转换:看TriggerWrapper类,看Constants State_xxx系列,TriggerState,应该是对应着不同的数据库表

Calendar

DailyCalender + WeeklyCalendar + MonthlyCalendar + AnnualCalendar + HolidayCalendar + CronCalendar 存储qrtz_calendars表中

JDBC Store & DataSource

ConnectionProvider=JNDIConnectionProvider + WeblogicConnectionProvider + PoolingConnectionProvider

PoolingConnectionProvider = C3p0PoolingConnectionProvider + HikariCpPoolingConnectionProvider

Job的durable可以控制job运行完成后是否保存

Trigger在运行完成之后无法选择保存,​基于Quartz开发企业级任务调度应用此文中给出了可以保存Trigger的方案;

在DbConnectionManager中,有org.quartz.db的配置

参考