一、quartz 表说明

表名 说明
qrtz_calendars 以Blob类型存储Quartz的Calendar信息
qrtz_cron_triggers 存储Cron Trigger,包括Cron表达式和时区信息
qrtz_fired_triggers 存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息
qrtz_paused_trigger_grps 存储已暂停的Trigger组的信息
qrtz_scheduler_state 存储少量的有关调度器(Scheduler)的状态,和别的调度器(Scheduler)实例(假如是用于一个集群中)
qrtz_locks 存储程序的非观锁的信息(假如使用了悲观锁)
qrtz_job_details 存储每一个已配置的Job的详细信息(jobDetail)
qrtz_job_listeners 存储有关已配置的Job监听器的信息
qrtz_simple_triggers 存储简单的Trigger,包括重复次数,间隔,以及已触的次数
qrtz_blob_triggers 以Blob类型存储的Trigger(用于Quartz用户用JDBC创建他们自己定制的Trigger 类型,JobStore并不知道如何存储实例的时候)
qrtz_trigger_listeners 存储已配置的触发器监听器(Trigger Listener)的信息
qrtz_triggers 存储已配置的触发器(Trigger)的信息
qrtz_simprop_triggers 存储CalendarIntervalTrigger和DailyTimeIntervalTrigger

二、quartz 的触发时间的配置

cron 方式:采用cronExpression表达式配置时间。
simple 方式:和JavaTimer差不多,可以指定一个开始时间和结束时间外加一个循环时间。
calendars 方式:可以和cron配合使用,用cron表达式指定一个触发时间规律,用calendar指定一个范围。
注意:
cron方式需要用到的4张数据表: qrtz_triggers,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details。

三、表创建

mysql:

  1. #
  2. ## In your Quartz properties file, you'll need to set
  3. ## org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  4. #
  5. #
  6. # By: Ron Cordell - roncordell
  7. # I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.
  8. ##
  9. DROP TABLE IF EXISTS qrtz_fired_triggers;
  10. DROP TABLE IF EXISTS qrtz_paused_trigger_grps;
  11. DROP TABLE IF EXISTS qrtz_scheduler_state;
  12. DROP TABLE IF EXISTS qrtz_locks;
  13. DROP TABLE IF EXISTS qrtz_simple_triggers;
  14. DROP TABLE IF EXISTS qrtz_simprop_triggers;
  15. DROP TABLE IF EXISTS qrtz_cron_triggers;
  16. DROP TABLE IF EXISTS qrtz_blob_triggers;
  17. DROP TABLE IF EXISTS qrtz_triggers;
  18. DROP TABLE IF EXISTS qrtz_job_details;
  19. DROP TABLE IF EXISTS qrtz_calendars;
  20. #-- 存储每一个已配置的 Job 的详细信息
  21. CREATE TABLE qrtz_job_details(
  22. SCHED_NAME VARCHAR(120) NOT NULL,
  23. JOB_NAME VARCHAR(200) NOT NULL,
  24. JOB_GROUP VARCHAR(200) NOT NULL,
  25. DESCRIPTION VARCHAR(250) NULL,
  26. JOB_CLASS_NAME VARCHAR(250) NOT NULL,
  27. IS_DURABLE VARCHAR(1) NOT NULL,
  28. IS_NONCONCURRENT VARCHAR(1) NOT NULL,
  29. IS_UPDATE_DATA VARCHAR(1) NOT NULL,
  30. REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
  31. JOB_DATA BLOB NULL,
  32. PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  34. #--存储已配置的 Trigger 的信息
  35. CREATE TABLE qrtz_triggers (
  36. SCHED_NAME VARCHAR(120) NOT NULL,
  37. TRIGGER_NAME VARCHAR(200) NOT NULL,
  38. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  39. JOB_NAME VARCHAR(200) NOT NULL,
  40. JOB_GROUP VARCHAR(200) NOT NULL,
  41. DESCRIPTION VARCHAR(250) NULL,
  42. NEXT_FIRE_TIME BIGINT(13) NULL,
  43. PREV_FIRE_TIME BIGINT(13) NULL,
  44. PRIORITY INTEGER NULL,
  45. TRIGGER_STATE VARCHAR(16) NOT NULL,
  46. TRIGGER_TYPE VARCHAR(8) NOT NULL,
  47. START_TIME BIGINT(13) NOT NULL,
  48. END_TIME BIGINT(13) NULL,
  49. CALENDAR_NAME VARCHAR(200) NULL,
  50. MISFIRE_INSTR SMALLINT(2) NULL,
  51. JOB_DATA BLOB NULL,
  52. PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
  53. FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
  54. REFERENCES qrtz_job_details(SCHED_NAME,JOB_NAME,JOB_GROUP)
  55. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  56. #-- 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数
  57. CREATE TABLE qrtz_simple_triggers (
  58. SCHED_NAME VARCHAR(120) NOT NULL,
  59. TRIGGER_NAME VARCHAR(200) NOT NULL,
  60. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  61. REPEAT_COUNT BIGINT(7) NOT NULL,
  62. REPEAT_INTERVAL BIGINT(12) NOT NULL,
  63. TIMES_TRIGGERED BIGINT(10) NOT NULL,
  64. PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
  65. FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  66. REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  67. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  68. #-- 存储 Cron Trigger,包括 Cron 表达式和时区信息
  69. CREATE TABLE qrtz_cron_triggers (
  70. SCHED_NAME VARCHAR(120) NOT NULL,
  71. TRIGGER_NAME VARCHAR(200) NOT NULL,
  72. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  73. CRON_EXPRESSION VARCHAR(120) NOT NULL,
  74. TIME_ZONE_ID VARCHAR(80),
  75. PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
  76. FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  77. REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  78. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  79. #-- 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数
  80. CREATE TABLE qrtz_simprop_triggers (
  81. SCHED_NAME VARCHAR(120) NOT NULL,
  82. TRIGGER_NAME VARCHAR(200) NOT NULL,
  83. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  84. STR_PROP_1 VARCHAR(512) NULL,
  85. STR_PROP_2 VARCHAR(512) NULL,
  86. STR_PROP_3 VARCHAR(512) NULL,
  87. INT_PROP_1 INT NULL,
  88. INT_PROP_2 INT NULL,
  89. LONG_PROP_1 BIGINT NULL,
  90. LONG_PROP_2 BIGINT NULL,
  91. DEC_PROP_1 NUMERIC(13,4) NULL,
  92. DEC_PROP_2 NUMERIC(13,4) NULL,
  93. BOOL_PROP_1 VARCHAR(1) NULL,
  94. BOOL_PROP_2 VARCHAR(1) NULL,
  95. PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
  96. FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  97. REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  98. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  99. #-- Trigger 作为 Blob 类型存储
  100. #-- (用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore并不知道如何存储实例的时候)
  101. CREATE TABLE qrtz_blob_triggers (
  102. SCHED_NAME VARCHAR(120) NOT NULL,
  103. TRIGGER_NAME VARCHAR(200) NOT NULL,
  104. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  105. BLOB_DATA BLOB NULL,
  106. PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
  107. INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
  108. FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  109. REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
  110. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  111. #-- 以 Blob 类型存储 Quartz 的 Calendar 信息
  112. CREATE TABLE qrtz_calendars (
  113. SCHED_NAME VARCHAR(120) NOT NULL,
  114. CALENDAR_NAME VARCHAR(200) NOT NULL,
  115. CALENDAR BLOB NOT NULL,
  116. PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
  117. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  118. #-- 存储已暂停的 Trigger 组的信息
  119. CREATE TABLE qrtz_paused_trigger_grps (
  120. SCHED_NAME VARCHAR(120) NOT NULL,
  121. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  122. PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
  123. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  124. #-- 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
  125. CREATE TABLE qrtz_fired_triggers (
  126. SCHED_NAME VARCHAR(120) NOT NULL,
  127. ENTRY_ID VARCHAR(95) NOT NULL,
  128. TRIGGER_NAME VARCHAR(200) NOT NULL,
  129. TRIGGER_GROUP VARCHAR(200) NOT NULL,
  130. INSTANCE_NAME VARCHAR(200) NOT NULL,
  131. FIRED_TIME BIGINT(13) NOT NULL,
  132. SCHED_TIME BIGINT(13) NOT NULL,
  133. PRIORITY INTEGER NOT NULL,
  134. STATE VARCHAR(16) NOT NULL,
  135. JOB_NAME VARCHAR(200) NULL,
  136. JOB_GROUP VARCHAR(200) NULL,
  137. IS_NONCONCURRENT VARCHAR(1) NULL,
  138. REQUESTS_RECOVERY VARCHAR(1) NULL,
  139. PRIMARY KEY (SCHED_NAME,ENTRY_ID)
  140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  141. #-- 存储少量的有关 Scheduler 的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)
  142. CREATE TABLE qrtz_scheduler_state (
  143. SCHED_NAME VARCHAR(120) NOT NULL,
  144. INSTANCE_NAME VARCHAR(200) NOT NULL,
  145. LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
  146. CHECKIN_INTERVAL BIGINT(13) NOT NULL,
  147. PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
  148. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  149. #-- 存储程序的悲观锁的信息(假如使用了悲观锁)
  150. CREATE TABLE qrtz_locks (
  151. SCHED_NAME VARCHAR(120) NOT NULL,
  152. LOCK_NAME VARCHAR(40) NOT NULL,
  153. PRIMARY KEY (SCHED_NAME,LOCK_NAME)
  154. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
  155. CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
  156. CREATE INDEX IDX_QRTZ_J_GRP ON qrtz_job_details(SCHED_NAME,JOB_GROUP);
  157. CREATE INDEX IDX_QRTZ_T_J ON qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
  158. CREATE INDEX IDX_QRTZ_T_JG ON qrtz_triggers(SCHED_NAME,JOB_GROUP);
  159. CREATE INDEX IDX_QRTZ_T_C ON qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
  160. CREATE INDEX IDX_QRTZ_T_G ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
  161. CREATE INDEX IDX_QRTZ_T_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
  162. CREATE INDEX IDX_QRTZ_T_N_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
  163. CREATE INDEX IDX_QRTZ_T_N_G_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
  164. CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
  165. CREATE INDEX IDX_QRTZ_T_NFT_ST ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
  166. CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
  167. CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
  168. CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
  169. CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
  170. CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
  171. CREATE INDEX IDX_QRTZ_FT_J_G ON qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
  172. CREATE INDEX IDX_QRTZ_FT_JG ON qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
  173. CREATE INDEX IDX_QRTZ_FT_T_G ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
  174. CREATE INDEX IDX_QRTZ_FT_TG ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
  175. commit;

四、字段含义

1、qrtz_job_details

qrtz_job_details 存储每一个已配置的 jobDetail 的详细信息

表字段 含义
sched_name 调度名称
job_name 集群中job的名字
job_group 集群中job的所属组的名字
description 详细描述信息
job_class_name 集群中个notejob实现类的全限定名,quartz就是根据这个路径到classpath找到该job类
is_durable 是否持久化,把该属性设置为1,quartz会把job持久化到数据库中
is_nonconcurrent 是否并发执行
is_update_data 是否更新数据
requests_recovery 是否接受恢复执行,默认为false,设置了RequestsRecovery为true,则该job会被重新执行
job_data 一个blob字段,存放持久化job对象

2、qrtz_triggers

qrtz_triggers 保存触发器的基本信息

表字段 含义
sched_name 调度名称
trigger_name 触发器的名字
trigger_group 触发器所属组的名字
job_name qrtz_job_details表job_name的外键
job_group qrtz_job_details表job_group的外键
description 详细描述信息
prev_fire_time 上一次触发时间(毫秒)
next_fire_time 下一次触发时间,默认为-1,意味不会自动触发
priority 优先级
trigger_state 当前触发器状态,设置为ACQUIRED,如果设置为WAITING,则job不会触发 (WAITING-等待,PAUSED-暂停,ACQUIRED-正常执行,BLOCKED-阻塞,ERROR-错误)
trigger_type 触发器的类型,使用cron表达式
start_time 开始时间
end_time 结束时间
calendar_name 日程表名称,表qrtz_calendars的calendar_name字段外键
misfire_instr 措施或者是补偿执行的策略
job_data 一个blob字段,存放持久化job对象

3、qrtz_cron_triggers

qrtz_cron_triggers 存储触发器的cron表达式表。

表字段 含义
sched_name 调度名称
trigger_name qrtz_triggers表trigger_name的外键
trigger_group qrtz_triggers表trigger_group的外键
cron_expression cron表达式
time_zone_id 时区

4、qrtz_scheduler_state

qrtz_scheduler_state 存储集群中note实例信息,quartz会定时读取该表的信息判断集群中每个实例的当前状态。

表字段 含义
sched_name 调度名称
instance_name 之前配置文件中org.quartz.scheduler.instanceId配置的名字,就会写入该字段
last_checkin_time 上次检查时间
checkin_interval 检查间隔时间

5、qrtz_blob_triggers Trigger

qrtz_blob_triggers Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)

表字段 含义
sched_name 调度名称
trigger_name qrtz_triggers表trigger_name的外键
trigger_group qrtz_triggers表trigger_group的外键
blob_data 一个blob字段,存放持久化Trigger对象

6、qrtz_calendars

qrtz_calendars 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围。

表字段 含义
sched_name 调度名称
calendar_name 日历名称
calendar 一个blob字段,存放持久化calendar对象

7、qrtz_fired_triggers

qrtz_fired_triggers 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息。

表字段 含义
sched_name 调度名称
entry_id 调度器实例id
trigger_name qrtz_triggers表trigger_name的外键
trigger_group qrtz_triggers表trigger_group的外键
instance_name 调度器实例名
fired_time 触发的时间
sched_time 定时器制定的时间
priority 优先级
state 状态
job_name 集群中job的名字
job_group 集群中job的所属组的名字
is_nonconcurrent 是否并发
requests_recovery 是否接受恢复执行,默认为false,设置了RequestsRecovery为true,则会被重新执行

8、qrtz_locks

qrtz_locks 存储程序的悲观锁的信息(假如使用了悲观锁)。

表字段 含义
sched_name 调度名称
lock_name 悲观锁名称

9、qrtz_paused_trigger_grps

qrtz_paused_trigger_grps 存储已暂停的 Trigger 组的信息。

表字段 含义
sched_name 调度名称
trigger_group qrtz_triggers表trigger_group的外键

10、qrtz_simple_triggers

qrtz_simple_triggers 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数。

表字段 含义
sched_name 调度名称
trigger_name qrtztriggers表trigger name的外键
trigger_group qrtz_triggers表trigger_group的外键
repeat_count 重复的次数统计
repeat_interval 重复的间隔时间
times_triggered 已经触发的次数

11、qrtz_simprop_triggers

qrtz_simprop_triggers 存储CalendarIntervalTrigger和DailyTimeIntervalTrigger

表字段 含义
SCHED_NAME 调度名称
TRIGGER_NAME qrtztriggers表trigger name的外键
TRIGGER_GROUP qrtz_triggers表trigger_group的外键
STR_PROP_1 String类型的trigger的第一个参数
STR_PROP_2 String类型的trigger的第二个参数
STR_PROP_3 String类型的trigger的第三个参数
INT_PROP_1 int类型的trigger的第一个参数
INT_PROP_2 int类型的trigger的第二个参数
LONG_PROP_1 long类型的trigger的第一个参数
LONG_PROP_2 long类型的trigger的第二个参数
DEC_PROP_1 decimal类型的trigger的第一个参数
DEC_PROP_2 decimal类型的trigger的第二个参数
BOOL_PROP_1 Boolean类型的trigger的第一个参数
BOOL_PROP_2 Boolean类型的trigger的第二个参数