Commit dadb66c8e9f8126bae13f9d6d0a4a578379a4d52
1 parent
c807de1f
初始化 Quartz 的整体代码
Showing
8 changed files
with
375 additions
and
179 deletions
sql/quartz.sql
| 1 | --- ---------------------------- | ||
| 2 | --- 1、存储每一个已配置的 jobDetail 的详细信息 | ||
| 3 | --- ---------------------------- | ||
| 4 | -drop table if exists QRTZ_JOB_DETAILS; | ||
| 5 | -create table QRTZ_JOB_DETAILS ( | ||
| 6 | - sched_name varchar(120) not null, | ||
| 7 | - job_name varchar(200) not null, | ||
| 8 | - job_group varchar(200) not null, | ||
| 9 | - description varchar(250) null, | ||
| 10 | - job_class_name varchar(250) not null, | ||
| 11 | - is_durable varchar(1) not null, | ||
| 12 | - is_nonconcurrent varchar(1) not null, | ||
| 13 | - is_update_data varchar(1) not null, | ||
| 14 | - requests_recovery varchar(1) not null, | ||
| 15 | - job_data blob null, | ||
| 16 | - primary key (sched_name,job_name,job_group) | ||
| 17 | -) engine=innodb; | ||
| 18 | - | ||
| 19 | --- ---------------------------- | ||
| 20 | --- 2、 存储已配置的 Trigger 的信息 | ||
| 21 | --- ---------------------------- | ||
| 22 | -drop table if exists QRTZ_TRIGGERS; | ||
| 23 | -create table QRTZ_TRIGGERS ( | ||
| 24 | - sched_name varchar(120) not null, | ||
| 25 | - trigger_name varchar(200) not null, | ||
| 26 | - trigger_group varchar(200) not null, | ||
| 27 | - job_name varchar(200) not null, | ||
| 28 | - job_group varchar(200) not null, | ||
| 29 | - description varchar(250) null, | ||
| 30 | - next_fire_time bigint(13) null, | ||
| 31 | - prev_fire_time bigint(13) null, | ||
| 32 | - priority integer null, | ||
| 33 | - trigger_state varchar(16) not null, | ||
| 34 | - trigger_type varchar(8) not null, | ||
| 35 | - start_time bigint(13) not null, | ||
| 36 | - end_time bigint(13) null, | ||
| 37 | - calendar_name varchar(200) null, | ||
| 38 | - misfire_instr smallint(2) null, | ||
| 39 | - job_data blob null, | ||
| 40 | - primary key (sched_name,trigger_name,trigger_group), | ||
| 41 | - foreign key (sched_name,job_name,job_group) references QRTZ_JOB_DETAILS(sched_name,job_name,job_group) | ||
| 42 | -) engine=innodb; | ||
| 43 | - | ||
| 44 | --- ---------------------------- | ||
| 45 | --- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 | ||
| 46 | --- ---------------------------- | ||
| 47 | -drop table if exists QRTZ_SIMPLE_TRIGGERS; | ||
| 48 | -create table QRTZ_SIMPLE_TRIGGERS ( | ||
| 49 | - sched_name varchar(120) not null, | ||
| 50 | - trigger_name varchar(200) not null, | ||
| 51 | - trigger_group varchar(200) not null, | ||
| 52 | - repeat_count bigint(7) not null, | ||
| 53 | - repeat_interval bigint(12) not null, | ||
| 54 | - times_triggered bigint(10) not null, | ||
| 55 | - primary key (sched_name,trigger_name,trigger_group), | ||
| 56 | - foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group) | ||
| 57 | -) engine=innodb; | ||
| 58 | - | ||
| 59 | --- ---------------------------- | ||
| 60 | --- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 | ||
| 61 | --- ---------------------------- | ||
| 62 | -drop table if exists QRTZ_CRON_TRIGGERS; | ||
| 63 | -create table QRTZ_CRON_TRIGGERS ( | ||
| 64 | - sched_name varchar(120) not null, | ||
| 65 | - trigger_name varchar(200) not null, | ||
| 66 | - trigger_group varchar(200) not null, | ||
| 67 | - cron_expression varchar(200) not null, | ||
| 68 | - time_zone_id varchar(80), | ||
| 69 | - primary key (sched_name,trigger_name,trigger_group), | ||
| 70 | - foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group) | ||
| 71 | -) engine=innodb; | ||
| 72 | - | ||
| 73 | --- ---------------------------- | ||
| 74 | --- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) | ||
| 75 | --- ---------------------------- | ||
| 76 | -drop table if exists QRTZ_BLOB_TRIGGERS; | ||
| 77 | -create table QRTZ_BLOB_TRIGGERS ( | ||
| 78 | - sched_name varchar(120) not null, | ||
| 79 | - trigger_name varchar(200) not null, | ||
| 80 | - trigger_group varchar(200) not null, | ||
| 81 | - blob_data blob null, | ||
| 82 | - primary key (sched_name,trigger_name,trigger_group), | ||
| 83 | - foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group) | ||
| 84 | -) engine=innodb; | ||
| 85 | - | ||
| 86 | --- ---------------------------- | ||
| 87 | --- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 | ||
| 88 | --- ---------------------------- | ||
| 89 | -drop table if exists QRTZ_CALENDARS; | ||
| 90 | -create table QRTZ_CALENDARS ( | ||
| 91 | - sched_name varchar(120) not null, | ||
| 92 | - calendar_name varchar(200) not null, | ||
| 93 | - calendar blob not null, | ||
| 94 | - primary key (sched_name,calendar_name) | ||
| 95 | -) engine=innodb; | ||
| 96 | - | ||
| 97 | --- ---------------------------- | ||
| 98 | --- 7、 存储已暂停的 Trigger 组的信息 | ||
| 99 | --- ---------------------------- | ||
| 100 | -drop table if exists QRTZ_PAUSED_TRIGGER_GRPS; | ||
| 101 | -create table QRTZ_PAUSED_TRIGGER_GRPS ( | ||
| 102 | - sched_name varchar(120) not null, | ||
| 103 | - trigger_group varchar(200) not null, | ||
| 104 | - primary key (sched_name,trigger_group) | ||
| 105 | -) engine=innodb; | ||
| 106 | - | ||
| 107 | --- ---------------------------- | ||
| 108 | --- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 | ||
| 109 | --- ---------------------------- | ||
| 110 | -drop table if exists QRTZ_FIRED_TRIGGERS; | ||
| 111 | -create table QRTZ_FIRED_TRIGGERS ( | ||
| 112 | - sched_name varchar(120) not null, | ||
| 113 | - entry_id varchar(95) not null, | ||
| 114 | - trigger_name varchar(200) not null, | ||
| 115 | - trigger_group varchar(200) not null, | ||
| 116 | - instance_name varchar(200) not null, | ||
| 117 | - fired_time bigint(13) not null, | ||
| 118 | - sched_time bigint(13) not null, | ||
| 119 | - priority integer not null, | ||
| 120 | - state varchar(16) not null, | ||
| 121 | - job_name varchar(200) null, | ||
| 122 | - job_group varchar(200) null, | ||
| 123 | - is_nonconcurrent varchar(1) null, | ||
| 124 | - requests_recovery varchar(1) null, | ||
| 125 | - primary key (sched_name,entry_id) | ||
| 126 | -) engine=innodb; | ||
| 127 | - | ||
| 128 | --- ---------------------------- | ||
| 129 | --- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 | ||
| 130 | --- ---------------------------- | ||
| 131 | -drop table if exists QRTZ_SCHEDULER_STATE; | ||
| 132 | -create table QRTZ_SCHEDULER_STATE ( | ||
| 133 | - sched_name varchar(120) not null, | ||
| 134 | - instance_name varchar(200) not null, | ||
| 135 | - last_checkin_time bigint(13) not null, | ||
| 136 | - checkin_interval bigint(13) not null, | ||
| 137 | - primary key (sched_name,instance_name) | ||
| 138 | -) engine=innodb; | ||
| 139 | - | ||
| 140 | --- ---------------------------- | ||
| 141 | --- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) | ||
| 142 | --- ---------------------------- | ||
| 143 | -drop table if exists QRTZ_LOCKS; | ||
| 144 | -create table QRTZ_LOCKS ( | ||
| 145 | - sched_name varchar(120) not null, | ||
| 146 | - lock_name varchar(40) not null, | ||
| 147 | - primary key (sched_name,lock_name) | ||
| 148 | -) engine=innodb; | ||
| 149 | - | ||
| 150 | -drop table if exists QRTZ_SIMPROP_TRIGGERS; | ||
| 151 | -create table QRTZ_SIMPROP_TRIGGERS ( | ||
| 152 | - sched_name varchar(120) not null, | ||
| 153 | - trigger_name varchar(200) not null, | ||
| 154 | - trigger_group varchar(200) not null, | ||
| 155 | - str_prop_1 varchar(512) null, | ||
| 156 | - str_prop_2 varchar(512) null, | ||
| 157 | - str_prop_3 varchar(512) null, | ||
| 158 | - int_prop_1 int null, | ||
| 159 | - int_prop_2 int null, | ||
| 160 | - long_prop_1 bigint null, | ||
| 161 | - long_prop_2 bigint null, | ||
| 162 | - dec_prop_1 numeric(13,4) null, | ||
| 163 | - dec_prop_2 numeric(13,4) null, | ||
| 164 | - bool_prop_1 varchar(1) null, | ||
| 165 | - bool_prop_2 varchar(1) null, | ||
| 166 | - primary key (sched_name,trigger_name,trigger_group), | ||
| 167 | - foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group) | ||
| 168 | -) engine=innodb; | ||
| 169 | - | ||
| 170 | -commit; | ||
| 171 | \ No newline at end of file | 1 | \ No newline at end of file |
| 2 | + | ||
| 3 | +# | ||
| 4 | +# In your Quartz properties file, you'll need to set | ||
| 5 | +# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate | ||
| 6 | +# | ||
| 7 | +# | ||
| 8 | +# By: Ron Cordell - roncordell | ||
| 9 | +# 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. | ||
| 10 | + | ||
| 11 | +DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; | ||
| 12 | +DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; | ||
| 13 | +DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; | ||
| 14 | +DROP TABLE IF EXISTS QRTZ_LOCKS; | ||
| 15 | +DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; | ||
| 16 | +DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; | ||
| 17 | +DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; | ||
| 18 | +DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; | ||
| 19 | +DROP TABLE IF EXISTS QRTZ_TRIGGERS; | ||
| 20 | +DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; | ||
| 21 | +DROP TABLE IF EXISTS QRTZ_CALENDARS; | ||
| 22 | + | ||
| 23 | +CREATE TABLE QRTZ_JOB_DETAILS( | ||
| 24 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 25 | +JOB_NAME VARCHAR(190) NOT NULL, | ||
| 26 | +JOB_GROUP VARCHAR(190) NOT NULL, | ||
| 27 | +DESCRIPTION VARCHAR(250) NULL, | ||
| 28 | +JOB_CLASS_NAME VARCHAR(250) NOT NULL, | ||
| 29 | +IS_DURABLE VARCHAR(1) NOT NULL, | ||
| 30 | +IS_NONCONCURRENT VARCHAR(1) NOT NULL, | ||
| 31 | +IS_UPDATE_DATA VARCHAR(1) NOT NULL, | ||
| 32 | +REQUESTS_RECOVERY VARCHAR(1) NOT NULL, | ||
| 33 | +JOB_DATA BLOB NULL, | ||
| 34 | +PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) | ||
| 35 | +ENGINE=InnoDB; | ||
| 36 | + | ||
| 37 | +CREATE TABLE QRTZ_TRIGGERS ( | ||
| 38 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 39 | +TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 40 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 41 | +JOB_NAME VARCHAR(190) NOT NULL, | ||
| 42 | +JOB_GROUP VARCHAR(190) NOT NULL, | ||
| 43 | +DESCRIPTION VARCHAR(250) NULL, | ||
| 44 | +NEXT_FIRE_TIME BIGINT(13) NULL, | ||
| 45 | +PREV_FIRE_TIME BIGINT(13) NULL, | ||
| 46 | +PRIORITY INTEGER NULL, | ||
| 47 | +TRIGGER_STATE VARCHAR(16) NOT NULL, | ||
| 48 | +TRIGGER_TYPE VARCHAR(8) NOT NULL, | ||
| 49 | +START_TIME BIGINT(13) NOT NULL, | ||
| 50 | +END_TIME BIGINT(13) NULL, | ||
| 51 | +CALENDAR_NAME VARCHAR(190) NULL, | ||
| 52 | +MISFIRE_INSTR SMALLINT(2) NULL, | ||
| 53 | +JOB_DATA BLOB NULL, | ||
| 54 | +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | ||
| 55 | +FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | ||
| 56 | +REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) | ||
| 57 | +ENGINE=InnoDB; | ||
| 58 | + | ||
| 59 | +CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( | ||
| 60 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 61 | +TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 62 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 63 | +REPEAT_COUNT BIGINT(7) NOT NULL, | ||
| 64 | +REPEAT_INTERVAL BIGINT(12) NOT NULL, | ||
| 65 | +TIMES_TRIGGERED BIGINT(10) NOT NULL, | ||
| 66 | +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | ||
| 67 | +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | ||
| 68 | +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | ||
| 69 | +ENGINE=InnoDB; | ||
| 70 | + | ||
| 71 | +CREATE TABLE QRTZ_CRON_TRIGGERS ( | ||
| 72 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 73 | +TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 74 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 75 | +CRON_EXPRESSION VARCHAR(120) NOT NULL, | ||
| 76 | +TIME_ZONE_ID VARCHAR(80), | ||
| 77 | +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | ||
| 78 | +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | ||
| 79 | +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | ||
| 80 | +ENGINE=InnoDB; | ||
| 81 | + | ||
| 82 | +CREATE TABLE QRTZ_SIMPROP_TRIGGERS | ||
| 83 | + ( | ||
| 84 | + SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 85 | + TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 86 | + TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 87 | + STR_PROP_1 VARCHAR(512) NULL, | ||
| 88 | + STR_PROP_2 VARCHAR(512) NULL, | ||
| 89 | + STR_PROP_3 VARCHAR(512) NULL, | ||
| 90 | + INT_PROP_1 INT NULL, | ||
| 91 | + INT_PROP_2 INT NULL, | ||
| 92 | + LONG_PROP_1 BIGINT NULL, | ||
| 93 | + LONG_PROP_2 BIGINT NULL, | ||
| 94 | + DEC_PROP_1 NUMERIC(13,4) NULL, | ||
| 95 | + DEC_PROP_2 NUMERIC(13,4) NULL, | ||
| 96 | + BOOL_PROP_1 VARCHAR(1) NULL, | ||
| 97 | + BOOL_PROP_2 VARCHAR(1) NULL, | ||
| 98 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | ||
| 99 | + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | ||
| 100 | + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | ||
| 101 | +ENGINE=InnoDB; | ||
| 102 | + | ||
| 103 | +CREATE TABLE QRTZ_BLOB_TRIGGERS ( | ||
| 104 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 105 | +TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 106 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 107 | +BLOB_DATA BLOB NULL, | ||
| 108 | +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | ||
| 109 | +INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), | ||
| 110 | +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | ||
| 111 | +REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | ||
| 112 | +ENGINE=InnoDB; | ||
| 113 | + | ||
| 114 | +CREATE TABLE QRTZ_CALENDARS ( | ||
| 115 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 116 | +CALENDAR_NAME VARCHAR(190) NOT NULL, | ||
| 117 | +CALENDAR BLOB NOT NULL, | ||
| 118 | +PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) | ||
| 119 | +ENGINE=InnoDB; | ||
| 120 | + | ||
| 121 | +CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( | ||
| 122 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 123 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 124 | +PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) | ||
| 125 | +ENGINE=InnoDB; | ||
| 126 | + | ||
| 127 | +CREATE TABLE QRTZ_FIRED_TRIGGERS ( | ||
| 128 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 129 | +ENTRY_ID VARCHAR(95) NOT NULL, | ||
| 130 | +TRIGGER_NAME VARCHAR(190) NOT NULL, | ||
| 131 | +TRIGGER_GROUP VARCHAR(190) NOT NULL, | ||
| 132 | +INSTANCE_NAME VARCHAR(190) NOT NULL, | ||
| 133 | +FIRED_TIME BIGINT(13) NOT NULL, | ||
| 134 | +SCHED_TIME BIGINT(13) NOT NULL, | ||
| 135 | +PRIORITY INTEGER NOT NULL, | ||
| 136 | +STATE VARCHAR(16) NOT NULL, | ||
| 137 | +JOB_NAME VARCHAR(190) NULL, | ||
| 138 | +JOB_GROUP VARCHAR(190) NULL, | ||
| 139 | +IS_NONCONCURRENT VARCHAR(1) NULL, | ||
| 140 | +REQUESTS_RECOVERY VARCHAR(1) NULL, | ||
| 141 | +PRIMARY KEY (SCHED_NAME,ENTRY_ID)) | ||
| 142 | +ENGINE=InnoDB; | ||
| 143 | + | ||
| 144 | +CREATE TABLE QRTZ_SCHEDULER_STATE ( | ||
| 145 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 146 | +INSTANCE_NAME VARCHAR(190) NOT NULL, | ||
| 147 | +LAST_CHECKIN_TIME BIGINT(13) NOT NULL, | ||
| 148 | +CHECKIN_INTERVAL BIGINT(13) NOT NULL, | ||
| 149 | +PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) | ||
| 150 | +ENGINE=InnoDB; | ||
| 151 | + | ||
| 152 | +CREATE TABLE QRTZ_LOCKS ( | ||
| 153 | +SCHED_NAME VARCHAR(120) NOT NULL, | ||
| 154 | +LOCK_NAME VARCHAR(40) NOT NULL, | ||
| 155 | +PRIMARY KEY (SCHED_NAME,LOCK_NAME)) | ||
| 156 | +ENGINE=InnoDB; | ||
| 157 | + | ||
| 158 | +CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); | ||
| 159 | +CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); | ||
| 160 | + | ||
| 161 | +CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); | ||
| 162 | +CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); | ||
| 163 | +CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); | ||
| 164 | +CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); | ||
| 165 | +CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); | ||
| 166 | +CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); | ||
| 167 | +CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); | ||
| 168 | +CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); | ||
| 169 | +CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); | ||
| 170 | +CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); | ||
| 171 | +CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); | ||
| 172 | +CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); | ||
| 173 | + | ||
| 174 | +CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); | ||
| 175 | +CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); | ||
| 176 | +CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); | ||
| 177 | +CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); | ||
| 178 | +CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); | ||
| 179 | +CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); | ||
| 180 | + | ||
| 181 | +commit; |
src/main/java/cn/iocoder/dashboard/framework/quartz/core/enums/JobDataKeyEnum.java
0 → 100644
src/main/java/cn/iocoder/dashboard/framework/quartz/core/handler/JobHandler.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.quartz.core.handler; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.common.pojo.CommonResult; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * 任务处理器 | ||
| 7 | + * | ||
| 8 | + * @author 芋道源码 | ||
| 9 | + */ | ||
| 10 | +public interface JobHandler { | ||
| 11 | + | ||
| 12 | + /** | ||
| 13 | + * 执行任务 | ||
| 14 | + * | ||
| 15 | + * @param param 参数 | ||
| 16 | + * @return 结果 | ||
| 17 | + * @throws Exception 异常 | ||
| 18 | + */ | ||
| 19 | + CommonResult<String> execute(String param) throws Exception; | ||
| 20 | + | ||
| 21 | +} |
src/main/java/cn/iocoder/dashboard/framework/quartz/core/handler/JobHandlerInvoker.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.quartz.core.handler; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.quartz.core.enums.JobDataKeyEnum; | ||
| 4 | +import org.quartz.DisallowConcurrentExecution; | ||
| 5 | +import org.quartz.JobExecutionContext; | ||
| 6 | +import org.quartz.PersistJobDataAfterExecution; | ||
| 7 | +import org.springframework.context.ApplicationContext; | ||
| 8 | +import org.springframework.scheduling.quartz.QuartzJobBean; | ||
| 9 | + | ||
| 10 | +import javax.annotation.Resource; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 基础 Job 调用者,负责调用 {@link JobHandler#execute(String)} 执行任务 | ||
| 14 | + * | ||
| 15 | + * @author 芋道源码 | ||
| 16 | + */ | ||
| 17 | +@PersistJobDataAfterExecution | ||
| 18 | +@DisallowConcurrentExecution | ||
| 19 | +public class JobHandlerInvoker extends QuartzJobBean { | ||
| 20 | + | ||
| 21 | + @Resource | ||
| 22 | + private ApplicationContext applicationContext; | ||
| 23 | + | ||
| 24 | + @Override | ||
| 25 | + protected void executeInternal(JobExecutionContext executionContext) { | ||
| 26 | + // 获得 JobHandler 对象 | ||
| 27 | + String jobHandlerName = getJobData(executionContext, JobDataKeyEnum.JOB_HANDLER_NAME); | ||
| 28 | + JobHandler jobHandler = applicationContext.getBean(jobHandlerName, JobHandler.class); | ||
| 29 | + | ||
| 30 | + // 执行任务 | ||
| 31 | + String jobParam = getJobData(executionContext, JobDataKeyEnum.JOB_HANDLER_PARAM); | ||
| 32 | + try { | ||
| 33 | + jobHandler.execute(jobParam); | ||
| 34 | + } catch (Exception e) { | ||
| 35 | + // TODO 需要后续处理 | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @SuppressWarnings("SwitchStatementWithTooFewBranches") | ||
| 40 | + private static String getJobData(JobExecutionContext executionContext, JobDataKeyEnum key) { | ||
| 41 | + switch (key) { | ||
| 42 | + case JOB_ID: | ||
| 43 | + return executionContext.getJobDetail().getJobDataMap().getString(key.name()); | ||
| 44 | + default: | ||
| 45 | + return executionContext.getTrigger().getJobDataMap().getString(key.name()); | ||
| 46 | + } | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | +} |
src/main/java/cn/iocoder/dashboard/framework/quartz/core/scheduler/SchedulerManager.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.quartz.core.scheduler; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.framework.quartz.core.enums.JobDataKeyEnum; | ||
| 4 | +import cn.iocoder.dashboard.framework.quartz.core.handler.JobHandlerInvoker; | ||
| 5 | +import org.quartz.*; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * {@link org.quartz.Scheduler} 的管理器,负责创建任务 | ||
| 9 | + * | ||
| 10 | + * @author 芋道源码 | ||
| 11 | + */ | ||
| 12 | +public class SchedulerManager { | ||
| 13 | + | ||
| 14 | + private final Scheduler scheduler; | ||
| 15 | + | ||
| 16 | + public SchedulerManager(Scheduler scheduler) { | ||
| 17 | + this.scheduler = scheduler; | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam, | ||
| 21 | + String triggerName, String cronExpression) | ||
| 22 | + throws SchedulerException { | ||
| 23 | + // 创建 JobDetail 对象 | ||
| 24 | + JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class) | ||
| 25 | + .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId) | ||
| 26 | + .withIdentity(jobHandlerName).build(); | ||
| 27 | + // 创建 Trigger 对象 | ||
| 28 | + Trigger trigger = TriggerBuilder.newTrigger() | ||
| 29 | + .withIdentity(triggerName) | ||
| 30 | + .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName) | ||
| 31 | + .usingJobData(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam) | ||
| 32 | + .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)) | ||
| 33 | + .build(); | ||
| 34 | + // 新增调度 | ||
| 35 | + scheduler.scheduleJob(jobDetail, trigger); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public void updateJob(String jobHandlerName, String jobHandlerParam, | ||
| 39 | + String triggerName, String cronExpression) throws SchedulerException { | ||
| 40 | + // 创建 Trigger 对象 | ||
| 41 | + Trigger trigger = TriggerBuilder.newTrigger() | ||
| 42 | + .withIdentity(triggerName) | ||
| 43 | + .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName) | ||
| 44 | + .usingJobData(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam) | ||
| 45 | + .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)) | ||
| 46 | + .build(); | ||
| 47 | + // 修改调度 | ||
| 48 | + scheduler.rescheduleJob(new TriggerKey(triggerName), trigger); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public void deleteJob(String jobHandlerName) throws SchedulerException { | ||
| 52 | + scheduler.deleteJob(new JobKey(jobHandlerName)); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + public void pauseJob(String jobHandlerName) throws SchedulerException { | ||
| 56 | + scheduler.pauseJob(new JobKey(jobHandlerName)); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + public void resumeJob(String jobHandlerName, | ||
| 60 | + String triggerName) throws SchedulerException { | ||
| 61 | + scheduler.resumeJob(new JobKey(jobHandlerName)); | ||
| 62 | + scheduler.resumeTrigger(new TriggerKey(triggerName)); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam) | ||
| 66 | + throws SchedulerException { | ||
| 67 | + JobDataMap data = new JobDataMap(); | ||
| 68 | + data.put(JobDataKeyEnum.JOB_ID.name(), jobId); | ||
| 69 | + data.put(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName); | ||
| 70 | + data.put(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam); | ||
| 71 | + // 触发任务 | ||
| 72 | + scheduler.triggerJob(new JobKey(jobHandlerName), data); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | +} |
src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJob.java renamed to src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJobDO.java
| @@ -12,7 +12,7 @@ import lombok.ToString; | @@ -12,7 +12,7 @@ import lombok.ToString; | ||
| 12 | import java.util.Date; | 12 | import java.util.Date; |
| 13 | 13 | ||
| 14 | /** | 14 | /** |
| 15 | - * 定时任务表 | 15 | + * 定时任务 DO |
| 16 | * | 16 | * |
| 17 | * @author 芋道源码 | 17 | * @author 芋道源码 |
| 18 | */ | 18 | */ |
| @@ -20,7 +20,7 @@ import java.util.Date; | @@ -20,7 +20,7 @@ import java.util.Date; | ||
| 20 | @Data | 20 | @Data |
| 21 | @EqualsAndHashCode(callSuper = true) | 21 | @EqualsAndHashCode(callSuper = true) |
| 22 | @ToString(callSuper = true) | 22 | @ToString(callSuper = true) |
| 23 | -public class InfJob extends BaseDO { | 23 | +public class InfJobDO extends BaseDO { |
| 24 | 24 | ||
| 25 | /** | 25 | /** |
| 26 | * 任务编号 | 26 | * 任务编号 |
src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJobLog.java renamed to src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJobLogDO.java
| @@ -18,7 +18,7 @@ import java.util.Date; | @@ -18,7 +18,7 @@ import java.util.Date; | ||
| 18 | @Data | 18 | @Data |
| 19 | @EqualsAndHashCode(callSuper = true) | 19 | @EqualsAndHashCode(callSuper = true) |
| 20 | @ToString(callSuper = true) | 20 | @ToString(callSuper = true) |
| 21 | -public class InfJobLog extends BaseDO { | 21 | +public class InfJobLogDO extends BaseDO { |
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | * 日志编号 | 24 | * 日志编号 |
| @@ -27,31 +27,31 @@ public class InfJobLog extends BaseDO { | @@ -27,31 +27,31 @@ public class InfJobLog extends BaseDO { | ||
| 27 | /** | 27 | /** |
| 28 | * 任务编号 | 28 | * 任务编号 |
| 29 | * | 29 | * |
| 30 | - * 关联 {@link InfJob#getId()} | 30 | + * 关联 {@link InfJobDO#getId()} |
| 31 | */ | 31 | */ |
| 32 | private Long jobId; | 32 | private Long jobId; |
| 33 | /** | 33 | /** |
| 34 | * 任务名称 | 34 | * 任务名称 |
| 35 | * | 35 | * |
| 36 | - * 冗余字段 {@link InfJob#getName()} | 36 | + * 冗余字段 {@link InfJobDO#getName()} |
| 37 | */ | 37 | */ |
| 38 | private String jobName; | 38 | private String jobName; |
| 39 | /** | 39 | /** |
| 40 | * 任务分组 | 40 | * 任务分组 |
| 41 | * | 41 | * |
| 42 | - * 冗余字段 {@link InfJob#getGroup()} | 42 | + * 冗余字段 {@link InfJobDO#getGroup()} |
| 43 | */ | 43 | */ |
| 44 | private String jobGroup; | 44 | private String jobGroup; |
| 45 | /** | 45 | /** |
| 46 | * 处理器的名字 | 46 | * 处理器的名字 |
| 47 | * | 47 | * |
| 48 | - * 冗余字段 {@link InfJob#getHandlerName()} | 48 | + * 冗余字段 {@link InfJobDO#getHandlerName()} |
| 49 | */ | 49 | */ |
| 50 | private String handlerName; | 50 | private String handlerName; |
| 51 | /** | 51 | /** |
| 52 | * 处理器的参数 | 52 | * 处理器的参数 |
| 53 | * | 53 | * |
| 54 | - * 冗余字段 {@link InfJob#getHandlerParam()} | 54 | + * 冗余字段 {@link InfJobDO#getHandlerParam()} |
| 55 | */ | 55 | */ |
| 56 | private String handlerParam; | 56 | private String handlerParam; |
| 57 | 57 | ||
| @@ -82,7 +82,7 @@ public class InfJobLog extends BaseDO { | @@ -82,7 +82,7 @@ public class InfJobLog extends BaseDO { | ||
| 82 | /** | 82 | /** |
| 83 | * 结果数据 | 83 | * 结果数据 |
| 84 | * | 84 | * |
| 85 | - * 如果是对象,则使用 JSON 格式化 | 85 | + * 目前使用的 {@link CommonResult#getData()} 数据 |
| 86 | */ | 86 | */ |
| 87 | private String resultData; | 87 | private String resultData; |
| 88 | 88 |
src/main/resources/application.yaml
| @@ -42,6 +42,35 @@ spring: | @@ -42,6 +42,35 @@ spring: | ||
| 42 | # main: | 42 | # main: |
| 43 | # lazy-initialization: true # TODO 芋艿:本地开发环境,可以配置下 lazy 延迟加载 | 43 | # lazy-initialization: true # TODO 芋艿:本地开发环境,可以配置下 lazy 延迟加载 |
| 44 | 44 | ||
| 45 | + # Quartz 配置项,对应 QuartzProperties 配置类 | ||
| 46 | + quartz: | ||
| 47 | + scheduler-name: clusteredScheduler # Scheduler 名字。默认为 schedulerName | ||
| 48 | + job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。 | ||
| 49 | + auto-startup: true # Quartz 是否自动启动 | ||
| 50 | + startup-delay: 0 # 延迟 N 秒启动 | ||
| 51 | + wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true | ||
| 52 | + overwrite-existing-jobs: false # 是否覆盖已有 Job 的配置 | ||
| 53 | + properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档 | ||
| 54 | + org: | ||
| 55 | + quartz: | ||
| 56 | + # JobStore 相关配置 | ||
| 57 | + jobStore: | ||
| 58 | + # 数据源名称 | ||
| 59 | +# dataSource: quartzDataSource # 使用的数据源 TODO 使用默认数据源 | ||
| 60 | + class: org.quartz.impl.jdbcjobstore.JobStoreTX # JobStore 实现类 | ||
| 61 | + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate | ||
| 62 | + tablePrefix: QRTZ_ # Quartz 表前缀 | ||
| 63 | + isClustered: true # 是集群模式 | ||
| 64 | + clusterCheckinInterval: 1000 | ||
| 65 | + useProperties: false | ||
| 66 | + # 线程池相关配置 | ||
| 67 | + threadPool: | ||
| 68 | + threadCount: 25 # 线程池大小。默认为 10 。 | ||
| 69 | + threadPriority: 5 # 线程优先级 | ||
| 70 | + class: org.quartz.simpl.SimpleThreadPool # 线程池类型 | ||
| 71 | + jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置 | ||
| 72 | + initialize-schema: never # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。 | ||
| 73 | + | ||
| 45 | # 芋道配置项,设置当前项目所有自定义的配置 | 74 | # 芋道配置项,设置当前项目所有自定义的配置 |
| 46 | yudao: | 75 | yudao: |
| 47 | info: | 76 | info: |