使用Quartz需要创建的数据库表有哪些呢
当你在使用 Quartz 时,如果你选择使用 JDBC JobStore(例如 JobStoreTX),这些表会被自动创建并管理任务和触发器。如果你没有自动创建表,或者表丢失,你可以手动运行 Quartz 提供的数据库脚本来创建这些表。
在使用 Quartz 进行数据库持久化时,Quartz 会自动使用一组数据库表来存储调度信息、任务状态、触发器等数据。这些表用于管理定时任务、触发器、执行历史等内容,并支持任务的持久化和恢复。
1. Quartz 默认需要的表
Quartz 在初始化时,会要求数据库中存在以下一组表,具体表名和结构如下:
1.1 QRTZ_JOB_DETAILS
存储所有调度的任务的详细信息,包括任务名称、描述、所属组等。
表结构:
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 BOOLEAN NOT NULL,
IS_NONCONCURRENT BOOLEAN NOT NULL,
IS_UPDATE_DATA BOOLEAN NOT NULL,
REQUESTS_RECOVERY BOOLEAN NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
);
1.2 QRTZ_TRIGGERS
存储触发器的详细信息,包含触发器名称、触发时间、触发条件等。
表结构:
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,
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 INTEGER NOT NULL,
PRIORITY INTEGER NOT NULL,
IS_VOLATILE BOOLEAN NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);
1.3 QRTZ_SIMPLE_TRIGGERS
存储 SimpleTrigger
类型的触发器(用于定时执行任务),记录触发器的频率、计数等信息。
表结构:
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 INTEGER NOT NULL,
REPEAT_INTERVAL BIGINT(13) NOT NULL,
TIMES_TRIGGERED INTEGER NOT NULL,
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);
1.4 QRTZ_CRON_TRIGGERS
存储 CronTrigger
类型的触发器(用于按照 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) NOT NULL,
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
);
1.5 QRTZ_CALENDARS
存储与任务相关的日历信息,用于排除某些特定的日期和时间。
表结构:
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)
);
1.6 QRTZ_PAUSED_TRIGGER_GRPS
存储哪些触发器组已经被暂停。
表结构:
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
);
1.7 QRTZ_FIRED_TRIGGERS
存储每次触发器被触发时的相关信息,如触发的时间、任务的执行状态等。
表结构:
CREATE TABLE QRTZ_FIRED_TRIGGERS (
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(120) 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) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
IS_NONCONCURRENT BOOLEAN NOT NULL,
REQUESTS_RECOVERY BOOLEAN NOT NULL,
PRIMARY KEY (SCHED_NAME, ENTRY_ID)
);
1.8 QRTZ_JOB_LISTENERS
存储任务监听器信息,任务执行前后的通知机制。
表结构:
CREATE TABLE QRTZ_JOB_LISTENERS (
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_LISTENER_NAME VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME, JOB_LISTENER_NAME)
);
1.9 QRTZ_TRIGGER_LISTENERS
存储触发器监听器信息。
表结构:
CREATE TABLE QRTZ_TRIGGER_LISTENERS (
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_LISTENER_NAME VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME, TRIGGER_LISTENER_NAME)
);
1.10 QRTZ_LOCKS
存储 Quartz 调度器锁的相关信息,用于调度系统中的并发控制。
表结构:
CREATE TABLE QRTZ_LOCKS (
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME, LOCK_NAME)
);
给 IS_VOLATILE
字段设置默认值
修改数据库中的 QRTZ_TRIGGERS
表,给 IS_VOLATILE
字段设置一个默认值。这通常是 0
(表示 false
,非临时触发器)或者 1
(表示 true
,临时触发器),取决于你的需求。
ALTER TABLE QRTZ_TRIGGERS MODIFY IS_VOLATILE BOOLEAN NOT NULL DEFAULT 0;
这条 SQL 语句会将 IS_VOLATILE
字段的默认值设置为 0
,表示触发器默认是持久化的。
2. Quartz 表的作用
这些表的作用分别是:
- QRTZ_JOB_DETAILS:保存任务的元数据,包括任务的类、持久化标志、任务数据等。
- QRTZ_TRIGGERS:保存触发器的元数据,控制任务的执行时机。
- QRTZ_SIMPLE_TRIGGERS 和 QRTZ_CRON_TRIGGERS:分别保存
SimpleTrigger
和CronTrigger
类型触发器的特定信息。 - QRTZ_FIRED_TRIGGERS:记录任务触发的执行记录。
- QRTZ_LOCKS:用于锁机制,避免多个调度器并发执行同一任务。
- QRTZ_PAUSED_TRIGGER_GRPS:用于保存暂停的触发器组。
- QRTZ_CALENDARS:存储日历信息,用于排除特定的时间段。
- QRTZ_JOB_LISTENERS 和 QRTZ_TRIGGER_LISTENERS:用于监听任务和触发器的事件(如任务开始、完成等)。
3. 如何创建这些表
Quartz 提供了不同数据库的创建表的 SQL 脚本。你可以在 Quartz 的 GitHub 仓库或官方文档中找到这些 SQL 脚本,并根据你的数据库类型(如 MySQL、PostgreSQL、Oracle)执行相应的脚本。
也在spingboot配置文件中,配置自动建表
spring:
quartz:
jdbc:
initialize-schema: always #自动建表
job-store-type: jdbc
job-store-type: jdbc
scheduler-name: MyScheduler
job-factory: org.springframework.scheduling.quartz.SpringBeanJobFactory
properties:
org:
quartz:
scheduler:
instanceName: MyScheduler
threadPool:
threadCount: 10
4. 总 结
当你在使用 Quartz 时,如果你选择使用 JDBC JobStore(例如 JobStoreTX
),这些表会被自动创建并管理任务和触发器。如果你没有自动创建表,或者表丢失,你可以手动运行 Quartz 提供的数据库脚本来创建这些表。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)