SpringBoot集成quartz实现动态定时任务
(1)Quartz简介
Quartz三大组件:
一、调度器scheduler
二、任务job
三、触发器trigger
1、job:job是一个接口,通过实现job接口,可实现需要定时执行的代码逻辑。
2、JobDetail:JobDetail主要是用来描述job的相关信息,比如任务在scheduler中的组名等信息,job的子类。
2、trigger:可以通过cron表达式设置定时任务的触发时间。
3、scheduler:JobDetail和tigger需要注册到scheduler里,这样trigger才能触发job。
Quartz的执行流程:
在使用quartz时在数据库需要创建11张表(会在下面贴出),Quartz中会开一个QuartzSchedulerThread线程扫描表中快要执行job然后执行。
(2)springboot集成quartz
1、引入quartz依赖

2、配置类设置
3、实现job接口

4、创建一个api接口

5、测试定时任务

(3)sql脚本
SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE mydatabase.qrtz_blob_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_name的外键’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
blob_data blob NULL COMMENT ‘存放持久化Trigger对象’,
PRIMARY KEY (sched_name, trigger_name, trigger_group) USING BTREE,
CONSTRAINT qrtz_blob_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES mydatabase.qrtz_triggers (sched_name, trigger_name, trigger_group) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘Blob类型的触发器表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_calendars (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
calendar_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘日历名称’,
calendar blob NOT NULL COMMENT ‘存放持久化calendar对象’,
PRIMARY KEY (sched_name, calendar_name) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘日历信息表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_cron_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_name的外键’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
cron_expression varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘cron表达式’,
time_zone_id varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘时区’,
PRIMARY KEY (sched_name, trigger_name, trigger_group) USING BTREE,
CONSTRAINT qrtz_cron_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES mydatabase.qrtz_triggers (sched_name, trigger_name, trigger_group) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘Cron类型的触发器表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_fired_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
entry_id varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度器实例id’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_name的外键’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
instance_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度器实例名’,
fired_time bigint(13) NOT NULL COMMENT ‘触发的时间’,
sched_time bigint(13) NOT NULL COMMENT ‘定时器制定的时间’,
priority int(11) NOT NULL COMMENT ‘优先级’,
state varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘状态’,
job_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘任务名称’,
job_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘任务组名’,
is_nonconcurrent varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘是否并发’,
requests_recovery varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘是否接受恢复执行’,
PRIMARY KEY (sched_name, entry_id) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘已触发的触发器表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_job_details (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
job_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘任务名称’,
job_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘任务组名’,
description varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘相关介绍’,
job_class_name varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘执行任务类名称’,
is_durable varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘是否持久化’,
is_nonconcurrent varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘是否并发’,
is_update_data varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘是否更新数据’,
requests_recovery varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘是否接受恢复执行’,
job_data blob NULL COMMENT ‘存放持久化job对象’,
PRIMARY KEY (sched_name, job_name, job_group) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘任务详细信息表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_locks (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
lock_name varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘悲观锁名称’,
PRIMARY KEY (sched_name, lock_name) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘存储的悲观锁信息表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_paused_trigger_grps (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
PRIMARY KEY (sched_name, trigger_group) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘暂停的触发器表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_scheduler_state (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
instance_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘之前配置文件中org.quartz.scheduler.instanceId配置的名字,就会写入该字段’,
last_checkin_time bigint(13) NOT NULL COMMENT ‘上次检查时间’,
checkin_interval bigint(13) NOT NULL COMMENT ‘检查间隔时间’,
PRIMARY KEY (sched_name, instance_name) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘调度器状态表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_simple_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_ name的外键’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
repeat_count bigint(7) NOT NULL COMMENT ‘重复的次数统计’,
repeat_interval bigint(12) NOT NULL COMMENT ‘重复的间隔时间’,
times_triggered bigint(10) NOT NULL COMMENT ‘已经触发的次数’,
PRIMARY KEY (sched_name, trigger_name, trigger_group) USING BTREE,
CONSTRAINT qrtz_simple_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES mydatabase.qrtz_triggers (sched_name, trigger_name, trigger_group) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘简单触发器的信息表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_simprop_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_ name的外键’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_triggers表trigger_group的外键’,
str_prop_1 varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘String类型的trigger的第一个参数’,
str_prop_2 varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘String类型的trigger的第二个参数’,
str_prop_3 varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘String类型的trigger的第三个参数’,
int_prop_1 int(11) NULL DEFAULT NULL COMMENT ‘int类型的trigger的第一个参数’,
int_prop_2 int(11) NULL DEFAULT NULL COMMENT ‘int类型的trigger的第二个参数’,
long_prop_1 bigint(20) NULL DEFAULT NULL COMMENT ‘long类型的trigger的第一个参数’,
long_prop_2 bigint(20) NULL DEFAULT NULL COMMENT ‘long类型的trigger的第二个参数’,
dec_prop_1 decimal(13, 4) NULL DEFAULT NULL COMMENT ‘decimal类型的trigger的第一个参数’,
dec_prop_2 decimal(13, 4) NULL DEFAULT NULL COMMENT ‘decimal类型的trigger的第二个参数’,
bool_prop_1 varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘Boolean类型的trigger的第一个参数’,
bool_prop_2 varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘Boolean类型的trigger的第二个参数’,
PRIMARY KEY (sched_name, trigger_name, trigger_group) USING BTREE,
CONSTRAINT qrtz_simprop_triggers_ibfk_1 FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES mydatabase.qrtz_triggers (sched_name, trigger_name, trigger_group) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘同步机制的行锁表’ ROW_FORMAT = Dynamic;
CREATE TABLE mydatabase.qrtz_triggers (
sched_name varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘调度名称’,
trigger_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘触发器的名字’,
trigger_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘触发器所属组的名字’,
job_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_job_details表job_name的外键’,
job_group varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘qrtz_job_details表job_group的外键’,
description varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘相关介绍’,
next_fire_time bigint(13) NULL DEFAULT NULL COMMENT ‘上一次触发时间(毫秒)’,
prev_fire_time bigint(13) NULL DEFAULT NULL COMMENT ‘下一次触发时间(默认为-1表示不触发)’,
priority int(11) NULL DEFAULT NULL COMMENT ‘优先级’,
trigger_state varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘触发器状态’,
trigger_type varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘触发器的类型’,
start_time bigint(13) NOT NULL COMMENT ‘开始时间’,
end_time bigint(13) NULL DEFAULT NULL COMMENT ‘结束时间’,
calendar_name varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ‘日程表名称’,
misfire_instr smallint(2) NULL DEFAULT NULL COMMENT ‘补偿执行的策略’,
job_data blob NULL COMMENT ‘存放持久化job对象’,
PRIMARY KEY (sched_name, trigger_name, trigger_group) USING BTREE,
INDEX sched_name(sched_name, job_name, job_group) USING BTREE,
CONSTRAINT qrtz_triggers_ibfk_1 FOREIGN KEY (sched_name, job_name, job_group) REFERENCES mydatabase.qrtz_job_details (sched_name, job_name, job_group) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘触发器详细信息表’ ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS=1;

3万+

被折叠的 条评论
为什么被折叠?



