Quartz是一个开源框架。基于定时、定期的策略来执行任务是它的核心功能。
Quartz有三个核心要素:调度器(Schedule)、任务(Job)、触发器(Trigger)。
Job是一个接口,有一个方法void execute(),可以通过实现该接口来定义需要执行的任务;
JobDetail:Quartz每次执行job时,都重新创建一个job实例,会接收一个Job实现类,以便运行的时候通过newInstance()的反射调用机制去实例化Job.JobDetail是用来描述Job实现类以及相关静态信息,比如任务在Schedule中的组名等信息。
Trigger:触发器。描述触发Job执行的时间触发规则,实现类SimpleTrigger和CronTrigger,可以通过cron表达式定义出各种复杂的调度方案。
Calendar:是一些日历特定时间的集合。一个Trigger可以和多个calender关联;
Schedule:调度器。代表一个quartz的独立运行容器。Trigger和JobDetail可以注册到Schedule中。Schedule可以将Trigger绑定到某一JobDetail上,这样当Trigger被触发时,对应的Job就会执行。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。
Quartz有自己的专用数据表,下面是Quartz的数据表,在自己的数据库中执行下列sql语句
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;
-- 存储每一个已配置的Job的详细信息
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 VARCHAR ( 1 ) NOT NULL,
IS_NONCONCURRENT VARCHAR ( 1 ) NOT NULL,
IS_UPDATE_DATA VARCHAR ( 1 ) NOT NULL,
REQUESTS_RECOVERY VARCHAR ( 1 ) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY ( SCHED_NAME, JOB_NAME, JOB_GROUP )
) ENGINE = INNODB;
-- 存储已配置的Trigger的信息
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,
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,
MISFIRE_INSTR SMALLINT ( 2 ) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY ( SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP ),
FOREIGN KEY ( SCHED_NAME, JOB_NAME, JOB_GROUP ) REFERENCES QRTZ_JOB_DETAILS ( SCHED_NAME, JOB_NAME, JOB_GROUP )
) ENGINE = INNODB;
-- 存储已配置的Simple Trigger的信息
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 )
) ENGINE = INNODB;
-- 存储Cron Trigger,包括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 ),
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 )
) ENGINE = INNODB;
CREATE TABLE QRTZ_SIMPROP_T