Quartz的集群部署方案在架构上是分布式的,没有负责集中管理的节点,而是利用数据库锁的方式来实现集群环境下进行并发控制。BTW,分布式部署时需要保证各个节点的系统时间一致。
Quartz数据库核心表如下:
table
description
QRTZ_CALENDARS
存储Quartz的Calendar信息
QRTZ_CRON_TRIGGERS
存储CronTrigger,包括Cron表达式和时区信息
QRTZ_FIRED_TRIGGERS
存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息
QRTZ_PAUSED_TRIGGER_GRPS
存储已暂停的Trigger组的信息
QRTZ_SCHEDULER_STATE
存储少量的有关Scheduler的状态信息,和别的Scheduler实例
QRTZ_LOCKS
存储程序的悲观锁的信息
QRTZ_JOB_DETAILS
存储每一个已配置的Job的详细信息
QRTZ_JOB_LISTENERS
存储有关已配置的JobListener的信息
QRTZ_SIMPLE_TRIGGERS
存储简单的Trigger,包括重复次数、间隔、以及已触的次数
QRTZ_BLOG_TRIGGERS
Trigger作为Blob类型存储
QRTZ_TRIGGER_LISTENERS
存储已配置的TriggerListener的信息
QRTZ_TRIGGERS
存储已配置的Trigger的信息
数据库脚本(mysql_innodb):
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 9DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; 10DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; 11DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; 12DROP TABLE IF EXISTS QRTZ_LOCKS; 13DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; 14DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; 15DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; 16DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; 17DROP TABLE IF EXISTS QRTZ_TRIGGERS; 18DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; 19DROP TABLE IF EXISTS QRTZ_CALENDARS; 20 21CREATE TABLE QRTZ_JOB_DETAILS( 22SCHED_NAME VARCHAR(120) NOT NULL, 23JOB_NAME VARCHAR(200) NOT NULL, 24JOB_GROUP VARCHAR(200) NOT NULL, 25DESCRIPTION VARCHAR(250) NULL, 26JOB_CLASS_NAME VARCHAR(250) NOT NULL, 27IS_DURABLE VARCHAR(1) NOT NULL, 28IS_NONCONCURRENT VARCHAR(1) NOT NULL, 29IS_UPDATE_DATA VARCHAR(1) NOT NULL, 30REQUESTS_RECOVERY VARCHAR(1) NOT NULL, 31JOB_DATA BLOB NULL, 32PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) 33ENGINE=InnoDB; 34 35CREATE TABLE QRTZ_TRIGGERS ( 36SCHED_NAME VARCHAR(120) NOT NULL, 37TRIGGER_NAME VARCHAR(200) NOT NULL, 38TRIGGER_GROUP VARCHAR(200) NOT NULL, 39JOB_NAME VARCHAR(200) NOT NULL, 40JOB_GROUP VARCHAR(200) NOT NULL, 41DESCRIPTION VARCHAR(250) NULL, 42NEXT_FIRE_TIME BIGINT(13) NULL, 43PREV_FIRE_TIME BIGINT(13) NULL, 44PRIORITY INTEGER NULL, 45TRIGGER_STATE VARCHAR(16) NOT NULL, 46TRIGGER_TYPE VARCHAR(8) NOT NULL, 47START_TIME BIGINT(13) NOT NULL, 48END_TIME BIGINT(13) NULL, 49CALENDAR_NAME VARCHAR(200) NULL, 50MISFIRE_INSTR SMALLINT(2) NULL, 51JOB_DATA BLOB NULL, 52PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 53FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) 54REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) 55ENGINE=InnoDB; 56 57CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( 58SCHED_NAME VARCHAR(120) NOT NULL, 59TRIGGER_NAME VARCHAR(200) NOT NULL, 60TRIGGER_GROUP VARCHAR(200) NOT NULL, 61REPEAT_COUNT BIGINT(7) NOT NULL, 62REPEAT_INTERVAL BIGINT(12) NOT NULL, 63TIMES_TRIGGERED BIGINT(10) NOT NULL, 64PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 65FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 66REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) 67ENGINE=InnoDB; 68 69CREATE TABLE QRTZ_CRON_TRIGGERS ( 70SCHED_NAME VARCHAR(120) NOT NULL, 71TRIGGER_NAME VARCHAR(200) NOT NULL, 72TRIGGER_GROUP VARCHAR(200) NOT NULL, 73CRON_EXPRESSION VARCHAR(120) NOT NULL, 74TIME_ZONE_ID VARCHAR(80), 75PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 76FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 77REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) 78ENGINE=InnoDB; 79 80CREATE TABLE QRTZ_SIMPROP_TRIGGERS 81 ( 82 SCHED_NAME VARCHAR(120) NOT NULL, 83 TRIGGER_NAME VARCHAR(200) NOT NULL, 84 TRIGGER_GROUP VARCHAR(200) NOT NULL, 85 STR_PROP_1 VARCHAR(512) NULL, 86 STR_PROP_2 VARCHAR(512) NULL, 87 STR_PROP_3 VARCHAR(512) NULL, 88 INT_PROP_1 INT NULL, 89 INT_PROP_2 INT NULL, 90 LONG_PROP_1 BIGINT NULL, 91 LONG_PROP_2 BIGINT NULL, 92 DEC_PROP_1 NUMERIC(13,4) NULL, 93 DEC_PROP_2 NUMERIC(13,4) NULL, 94 BOOL_PROP_1 VARCHAR(1) NULL, 95 BOOL_PROP_2 VARCHAR(1) NULL, 96 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 97 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 98 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) 99ENGINE=InnoDB; 100 101CREATE TABLE QRTZ_BLOB_TRIGGERS ( 102SCHED_NAME VARCHAR(120) NOT NULL, 103TRIGGER_NAME VARCHAR(200) NOT NULL, 104TRIGGER_GROUP VARCHAR(200) NOT NULL, 105BLOB_DATA BLOB NULL, 106PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 107INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), 108FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 109REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) 110ENGINE=InnoDB; 111 112CREATE TABLE QRTZ_CALENDARS ( 113SCHED_NAME VARCHAR(120) NOT NULL, 114CALENDAR_NAME VARCHAR(200) NOT NULL, 115CALENDAR BLOB NOT NULL, 116PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) 117ENGINE=InnoDB; 118 119CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( 120SCHED_NAME VARCHAR(120) NOT NULL, 121TRIGGER_GROUP VARCHAR(200) NOT NULL, 122PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) 123ENGINE=InnoDB; 124 125CREATE TABLE QRTZ_FIRED_TRIGGERS ( 126SCHED_NAME VARCHAR(120) NOT NULL, 127ENTRY_ID VARCHAR(95) NOT NULL, 128TRIGGER_NAME VARCHAR(200) NOT NULL, 129TRIGGER_GROUP VARCHAR(200) NOT NULL, 130INSTANCE_NAME VARCHAR(200) NOT NULL, 131FIRED_TIME BIGINT(13) NOT NULL, 132SCHED_TIME BIGINT(13) NOT NULL, 133PRIORITY INTEGER NOT NULL, 134STATE VARCHAR(16) NOT NULL, 135JOB_NAME VARCHAR(200) NULL, 136JOB_GROUP VARCHAR(200) NULL, 137IS_NONCONCURRENT VARCHAR(1) NULL, 138REQUESTS_RECOVERY VARCHAR(1) NULL, 139PRIMARY KEY (SCHED_NAME,ENTRY_ID)) 140ENGINE=InnoDB; 141 142CREATE TABLE QRTZ_SCHEDULER_STATE ( 143SCHED_NAME VARCHAR(120) NOT NULL, 144INSTANCE_NAME VARCHAR(200) NOT NULL, 145LAST_CHECKIN_TIME BIGINT(13) NOT NULL, 146CHECKIN_INTERVAL BIGINT(13) NOT NULL, 147PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) 148ENGINE=InnoDB; 149 150CREATE TABLE QRTZ_LOCKS ( 151SCHED_NAME VARCHAR(120) NOT NULL, 152LOCK_NAME VARCHAR(40) NOT NULL, 153PRIMARY KEY (SCHED_NAME,LOCK_NAME)) 154ENGINE=InnoDB; 155 156CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); 157CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); 158 159CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); 160CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); 161CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); 162CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); 163CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); 164CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); 165CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); 166CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); 167CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); 168CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); 169CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); 170CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); 171 172CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); 173CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); 174CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); 175CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); 176CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); 177CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); 178 179commit;