Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等。 Quartz核心是调度器,还采用多线程管理。
1.持久化任务:当应用程序停止运行时,所有调度信息不被丢失,当你重新启动时,调度信息还存在,这就是持久化任务。
2.集群和分布式处理:当在集群环境下,当有配置Quartz的多个客户端时(节点),采用Quartz的集群和分布式处理时,我们要了解几点好处 1) 一个节点无法完成的任务,会被集群中拥有相同的任务的节点取代执行。2) Quartz调度是通过触发器的类别来识别不同的任务,在不同的节点定义相同的触发器的类别,这样在集群下能稳定的运行,一个节点无法完成的任务,会被集群中拥有相同的任务的节点取代执行。3)分布式 体现在 当相同的任务定时在一个时间点,在那个时间点,不会被两个节点同时执行。
Quartz的 Task(11 张表)实例化采用数据库存储,基于数据库引擎及 High-Available 的策略(集群的一种策略)自动协调每个节点的 Quartz。
- delete from qrtz_fired_triggers;
- delete from qrtz_simple_triggers;
- delete from qrtz_simprop_triggers;
- delete from qrtz_cron_triggers;
- delete from qrtz_blob_triggers;
- delete from qrtz_triggers;
- delete from qrtz_job_details;
- delete from qrtz_calendars;
- delete from qrtz_paused_trigger_grps;
- delete from qrtz_locks;
- delete from qrtz_scheduler_state;
- CREATE TABLE qrtz_job_details
- (
- SCHED_NAME VARCHAR2(120) NOT NULL,
- JOB_NAME VARCHAR2(200) NOT NULL,
- JOB_GROUP VARCHAR2(200) NOT NULL,
- DESCRIPTION VARCHAR2(250) NULL,
- JOB_CLASS_NAME VARCHAR2(250) NOT NULL,
- IS_DURABLE VARCHAR2(1) NOT NULL,
- IS_NONCONCURRENT VARCHAR2(1) NOT NULL,
- IS_UPDATE_DATA VARCHAR2(1) NOT NULL,
- REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,
- JOB_DATA BLOB NULL,
- CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
- );
- CREATE TABLE qrtz_triggers
- (
- SCHED_NAME VARCHAR2(120) NOT NULL,
- TRIGGER_NAME VARCHAR2(200) NOT NULL,
- TRIGGER_GROUP VARCHAR2(200) NOT NULL,
- JOB_NAME VARCHAR2(200) NOT NULL,
- JOB_GROUP VARCHAR2(200) NOT NULL,
- DESCRIPTION VARCHAR2(250) NULL,
- NEXT_FIRE_TIME NUMBER(13) NULL,
- PREV_FIRE_TIME NUMBER(13) NULL,
- PRIORITY NUMBER(13) NULL,
- TRIGGER_STATE VARCHAR2(16) NOT NULL,
- TRIGGER_TYPE VARCHAR2(8) NOT NULL,
- START_TIME NUMBER(13) NOT NULL,
- END_TIME NUMBER(13) NULL,
- CALENDAR_NAME VARCHAR2(200) NULL,
- MISFIRE_INSTR NUMBER(2) NULL,
- JOB_DATA BLOB NULL,
- CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
- REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
- );
- CREATE TABLE qrtz_simple_triggers
- (
- SCHED_NAME VARCHAR2(120) NOT NULL,
- TRIGGER_NAME VARCHAR2(200) NOT NULL,
- TRIGGER_GROUP VARCHAR2(200) NOT NULL,
- REPEAT_COUNT NUMBER(7) NOT NULL,
- REPEAT_INTERVAL NUMBER(12) NOT NULL,
- TIMES_TRIGGERED NUMBER(10) NOT NULL,
- CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- );
- CREATE TABLE qrtz_cron_triggers
- (
- SCHED_NAME VARCHAR2(120) NOT NULL,
- TRIGGER_NAME VARCHAR2(200) NOT NULL,
- TRIGGER_GROUP VARCHAR2(200) NOT NULL,
- CRON_EXPRESSION VARCHAR2(120) NOT NULL,
- TIME_ZONE_ID VARCHAR2(80),
- CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- );
- CREATE TABLE qrtz_simprop_triggers
- (
- SCHED_NAME VARCHAR2(120) NOT NULL,
- TRIGGER_NAME VARCHAR2(200) NOT NULL,
- TRIGGER_GROUP VARCHAR2(200) NOT NULL,
- STR_PROP_1 VARCHAR2(512) NULL,
- STR_PROP_2 VARCHAR2(512) NULL,
- STR_PROP_3 VARCHAR2(512) NULL,
- INT_PROP_1 NUMBER(10) NULL,
- INT_PROP_2 NUMBER(10) NULL,
- LONG_PROP_1 NUMBER(13) NULL,
- LONG_PROP_2 NUMBER(13) NULL,
- DEC_PROP_1 NUMERIC(13,4) NULL,
- DEC_PROP_2 NUMERIC(13,4) NULL,
- BOOL_PROP_1 VARCHAR2(1) NULL,
- BOOL_PROP_2 VARCHAR2(1) NULL,
- CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)