一、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:
#
## In your Quartz properties file, you'll need to set
## org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#
#
# By: Ron Cordell - roncordell
# 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.
##
DROP TABLE IF EXISTS qrtz_fired_triggers;
DROP TABLE IF EXISTS qrtz_paused_trigger_grps;
DROP TABLE IF EXISTS qrtz_scheduler_state;
DROP TABLE IF EXISTS qrtz_locks;
DROP TABLE IF EXISTS qrtz_simple_triggers;
DROP TABLE IF EXISTS qrtz_simprop_triggers;
DROP TABLE IF EXISTS qrtz_cron_triggers;
DROP TABLE IF EXISTS qrtz_blob_triggers;
DROP TABLE IF EXISTS qrtz_triggers;
DROP TABLE IF EXISTS qrtz_job_details;
DROP TABLE IF EXISTS qrtz_calendars;
#-- 存储每一个已配置的 Job 的详细信息
CREATE TABLE qrtz_job_details(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_NONCONCURRENT VARCHAR(1) NOT NULL,
IS_UPDATE_DATA VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#--存储已配置的 Trigger 的信息
CREATE TABLE qrtz_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
NEXT_FIRE_TIME BIGINT(13) NULL,
PREV_FIRE_TIME BIGINT(13) NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(16) NOT NULL,
TRIGGER_TYPE VARCHAR(8) NOT NULL,
START_TIME BIGINT(13) NOT NULL,
END_TIME BIGINT(13) NULL,
CALENDAR_NAME VARCHAR(200) NULL,
MISFIRE_INSTR SMALLINT(2) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES qrtz_job_details(SCHED_NAME,JOB_NAME,JOB_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数
CREATE TABLE qrtz_simple_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
REPEAT_COUNT BIGINT(7) NOT NULL,
REPEAT_INTERVAL BIGINT(12) NOT NULL,
TIMES_TRIGGERED BIGINT(10) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储 Cron Trigger,包括 Cron 表达式和时区信息
CREATE TABLE qrtz_cron_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
CRON_EXPRESSION VARCHAR(120) NOT NULL,
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储简单的 Trigger,包括重复次数,间隔,以及已触的次数
CREATE TABLE qrtz_simprop_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512) NULL,
STR_PROP_2 VARCHAR(512) NULL,
STR_PROP_3 VARCHAR(512) NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 VARCHAR(1) NULL,
BOOL_PROP_2 VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- Trigger 作为 Blob 类型存储
#-- (用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore并不知道如何存储实例的时候)
CREATE TABLE qrtz_blob_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 以 Blob 类型存储 Quartz 的 Calendar 信息
CREATE TABLE qrtz_calendars (
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储已暂停的 Trigger 组的信息
CREATE TABLE qrtz_paused_trigger_grps (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
CREATE TABLE qrtz_fired_triggers (
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
FIRED_TIME BIGINT(13) NOT NULL,
SCHED_TIME BIGINT(13) NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(16) NOT NULL,
JOB_NAME VARCHAR(200) NULL,
JOB_GROUP VARCHAR(200) NULL,
IS_NONCONCURRENT VARCHAR(1) NULL,
REQUESTS_RECOVERY VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储少量的有关 Scheduler 的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)
CREATE TABLE qrtz_scheduler_state (
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
CHECKIN_INTERVAL BIGINT(13) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
#-- 存储程序的悲观锁的信息(假如使用了悲观锁)
CREATE TABLE qrtz_locks (
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_J_GRP ON qrtz_job_details(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_J ON qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_JG ON qrtz_triggers(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_T_C ON qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
CREATE INDEX IDX_QRTZ_T_G ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_T_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST ON qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
CREATE INDEX IDX_QRTZ_FT_J_G ON qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_JG ON qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
CREATE INDEX IDX_QRTZ_FT_T_G ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
CREATE INDEX IDX_QRTZ_FT_TG ON qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
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的第二个参数 |