CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NAME VARCHAR(120) NOT NULL, JOB_NAME VARCHAR(200) NOT NULL, -- job的名字,该名字用户自定义 JOB_GROUP VARCHAR(200) NOT NULL, -- job的所属组的名字,该名字用户自定义 DESCRIPTION VARCHAR(250) NULL, -- 自定义描述 JOB_CLASS_NAME VARCHAR(250) NOT NULL, -- 集群中个note job实现类的完全包名,quartz就是根据这个路径到classpath找到该job类 IS_DURABLE VARCHAR(1) NOT NULL, -- 是否持久化,把该属性设置为1,quartz会把job持久化到数据库中 IS_NONCONCURRENT VARCHAR(1) NOT NULL, -- IS_UPDATE_DATA VARCHAR(1) NOT NULL, REQUESTS_RECOVERY VARCHAR(1) NOT NULL, JOB_DATA BLOB NULL, -- 一个blob字段,存放持久化job的数据 PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)-- 主键 );
CREATE TABLE QRTZ_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(200) NOT NULL, -- trigger的名字 TRIGGER_GROUP VARCHAR(200) NOT NULL, -- trigger所属组的名字 JOB_NAME VARCHAR(200) NOT NULL, -- job的名字 JOB_GROUP VARCHAR(200) NOT NULL, -- job的所属组的名字 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, -- 自定义calendar名称 MISFIRE_INSTR SMALLINT(2) NULL, -- Misfire(错失触发) JOB_DATA BLOB NULL, -- job传递的数据,JobDataMap序列号后的二进制数据 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -- 主键 FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) -- 外键约束QRTZ_JOB_DETAILS REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) );
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) );
CREATE TABLE QRTZ_CRON_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, -- 调度器名称 TRIGGER_NAME VARCHAR(200) NOT NULL, -- trigger的名字 TRIGGER_GROUP VARCHAR(200) NOT NULL, -- trigger所属组的名字 CRON_EXPRESSION VARCHAR(200) NOT NULL, -- cron表达式 TIME_ZONE_ID VARCHAR(80), -- 时区 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), -- 主键 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) -- 外键约束QRTZ_TRIGGERS REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) );
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) );
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), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) );
CREATE TABLE QRTZ_CALENDARS ( SCHED_NAME VARCHAR(120) NOT NULL, -- 调度器名称 CALENDAR_NAME VARCHAR(200) NOT NULL, -- 自定义calendar名称 CALENDAR BLOB NOT NULL, -- 对象 PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) );
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_GROUP VARCHAR(200) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) );
CREATE TABLE QRTZ_FIRED_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, -- 调度器名称 ENTRY_ID VARCHAR(95) NOT NULL, -- 入口id TRIGGER_NAME VARCHAR(200) NOT NULL, -- trigger的名字 TRIGGER_GROUP VARCHAR(200) NOT NULL, -- trigger所属组的名字 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的名字 JOB_GROUP VARCHAR(200) NULL, -- job的所属组的名字 IS_NONCONCURRENT VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,ENTRY_ID) );
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, -- 检查间隔,配置中设置org.quartz.jobStore.clusterCheckinInterval=20000 PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) );
STATE_ACCESS主要用在scheduler定期检查是否失效的时候,保证只有一个节点去处理已经失效的scheduler;
TRIGGER_ACCESS主要用在TRIGGER被调度的时候,保证只有一个节点去执行调度;
CREATE TABLE QRTZ_LOCKS ( SCHED_NAME VARCHAR(120) NOT NULL, -- 调度器名称 LOCK_NAME VARCHAR(40) NOT NULL, -- 锁名 PRIMARY KEY (SCHED_NAME,LOCK_NAME) );
WAITING 创建任务触发器默认状态
ACQUIRED 当到达触发时间时,获得状态
EXECUTING 运行中,firedTrigger表中
COMPLETE 完成状态,任务结束
BLOCKED 阻塞状态
ERROR 错误状态
PAUSED 暂停状态
PAUSED_BLOCKED 暂停阻塞状态,非并发下
DELETED 删除状态
以下为CronExpression javadoc 所示
Cron表达式组成的6所必需的字段和一个可选的字段由空格隔开。
"{Seconds} {Minutes} {Hours} {Day-of-month} {Month} {Day-of-Week} {Year(可选)}"
字段分别描述如下:
Field Name | Allowed Values | Allowed Special Characters | ||
---|---|---|---|---|
Seconds |
0-59 |
, - * / |
||
Minutes |
0-59 |
, - * / |
||
Hours |
0-23 |
, - * / |
||
Day-of-month |
1-31 |
, - * ? / L W |
||
Month |
0-11 or JAN-DEC |
, - * / |
||
Day-of-Week |
1-7 or SUN-SAT |
, - * ? / L # |
||
Year (Optional) |
empty, 1970-2199 |
, - * / |
‘ * ‘ 字符用于任意值。例如,“*”在分钟字段中意味着“每一分钟”触发。
‘ ? ‘ Day-of-month和Day-of-Week字段允许使用该字符,它用于指定“没有特定的值”触发。
‘ - ‘ 字符用于指定范围例如小时领域的“10-12”意味着“10点、11点和12点”触发。
‘ , ‘ 字符用于指定特定的值。例如“MON, WED, FRI”意味着“星期一,星期三,星期五”触发。
‘ / ‘ 字符用于指定增量。例如秒领域的“0/15”意味着“从0秒开始,15秒,30秒,和45秒”触发。
‘ L ‘ Day-of-month和Day-of-Week字段允许使用该字符。"last"的缩写,但它的两个领域有不同的含义。例如,日期字段的值“L”意味着“本月的最后一天”,1月的话为31日,闰年2月的话为28日。
如果单独使用用于Day-of-Week,指数字7或者SAT即周六。若在一个数字后面如"* * * ? * 6L" 指最后一个星期五。
还可以从这个月的最后一天指定一个偏移量,如"* * * L-3 * ?" 如本月最后一天是30日,则提前三天即27日。使用“L”选项时,重要的是不要指定列表,或值的范围,你会得到混乱的结果。
‘ W ‘ Day-of-month字段允许使用该字符。这个是用于指定工作日(Monday-Friday)最近的一天。
例子,如果你要“15w”指定为Day-of-Week字段的值,意思是:“到本月15日最近的工作日”。
如果15日是周六,触发器将在周五触发即14日。如果15日是周日,周一触发器将触发即16日。
如果15日是星期二,那么它将在周二触发即15日。然而如果指定“1w”作为Day-of-month值,1日是周六,周一触发器将火第三,因为它不会跨越一个月。‘W‘字符只能指定一天的日期,不是一个范围或列表。
‘L’和‘W’字符也可以组合为Day-of-month表达式产生“LW”,这意味着“本月最后一个工作日”。
‘ # ‘ Day-of-Week字段允许使用该字符。这个字符用于特殊的日期。例如,Day-of-Week属性使用“6#3”指的是这个月的第三个周五(6=周五和“#3”=第三个)。其他的例子:“2#1”=本月第一个星期一、“4#5”=第五个星期三。
请注意,如果您指定“#5”和没有给定的一月中的第5个周几,然后没有触发。如果使用“#”字符,只能有一个表达式在Day-of-Week字段(“3#1,6#3”是无效的,因为有两个表达式)。
‘ C ‘ Day-of-month和Day-of-Week字段允许使用该字符。"calendar"的缩写。计算相关的日历。在Day-of-month字段“5c”指下个5号触发,当前时间超过5号则下个月5号触发。“31C” 下一个31号触发
Day-of-Week字段“1c”意味着“下一个星期天”。
字符名称不区分大小写。
不能同时包含Day-of-month和Day-of-Week字段,指定其中一个时,需要使用?来指定另外一个,如上述例子中要不在Day-of-month上使用?,要不在Day-of-Week上使用?
年(可选): 最大值为当前年+100但是也不能超过2199:MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100;
CronExpression 中所示
月英文简称(get到后加1,对应月的整数为1-12):
monthMap.put("JAN", 0);
monthMap.put("FEB", 1);
monthMap.put("MAR", 2);
monthMap.put("APR", 3);
monthMap.put("MAY", 4);
monthMap.put("JUN", 5);
monthMap.put("JUL", 6);
monthMap.put("AUG", 7);
monthMap.put("SEP", 8);
monthMap.put("OCT", 9);
monthMap.put("NOV", 10);
monthMap.put("DEC", 11);
星期英文简称:
dayMap.put("SUN", 1);
dayMap.put("MON", 2);
dayMap.put("TUE", 3);
dayMap.put("WED", 4);
dayMap.put("THU", 5);
dayMap.put("FRI", 6);
dayMap.put("SAT", 7);
原文:https://www.cnblogs.com/lantuanqing/p/11010103.html