- 如果你认为Job是Quartz的主角,一定要转变思路,Trigger才是
- 一个Scheduler对象,就是一个Quartz实例,一组数据库表
Job & JobDetail
- Job JobDetails,一个JobDtail对象才是一个任务实例,包含执行的动作Job对象和Job相关属性,比如JobDetails#JobDataMap;
- 一个job可以被多个Trigger关联,但是一个tigger只能关联一个job
- 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的配置
配置实用HikariCpPoolingConnectionProvider时的bug,此类没有无参数的构造方法,无法被实例化!
参考
Quartz数据库表分析