一、quartz 表說明
序號 表名 說明
1. qrtz_calendars 以 Blob 類型存儲 Quartz 的 Calendar 信息
2. qrtz_cron_triggers 存儲 Cron Trigger,包括 Cron 表達式和時區信息
3. qrtz_fired_triggers 存儲與已觸發的 Trigger 相關的狀態信息,以及相聯 Job 的執行信息
4. qrtz_paused_trigger_grps 存儲已暫停的 Trigger 組的信息
5. qrtz_scheduler_state 存儲少量的有關調度器 (Scheduler) 的狀態,和別的 調度器 (Scheduler)實例(假如是用於一個集群中)
6. qrtz_locks 存儲程序的非觀鎖的信息(假如使用了悲觀鎖)
7. qrtz_job_details 存儲每一個已配置的 Job 的詳細信息(jobDetail)
8. qrtz_job_listeners 存儲有關已配置的 Job 監聽器 的信息
9. qrtz_simple_triggers 存儲簡單的 Trigger,包括重復次數,間隔,以及已觸的次數
10. qrtz_blog_triggers 以 Blob 類型存儲的Trigger
(用於 Quartz 用戶用 JDBC 創建他們自己定制的 Trigger 類型,JobStore 並不知道如何存儲實例的時候)
11. qrtz_trigger_listeners 存儲已配置的觸發器監聽器 ( Trigger Listener ) 的信息
12. qrtz_triggers 存儲已配置的 觸發器 (Trigger) 的信息
二、quartz 的觸發時間的配置
cron 方式:采用cronExpression表達式配置時間。
simple 方式:和JavaTimer差不多,可以指定一個開始時間和結束時間外加一個循環時間。
calendars 方式:可以和cron配合使用,用cron表達式指定一個觸發時間規律,用calendar指定一個范圍。
注意:
cron方式需要用到的4張數據表: qrtz_triggers,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details。
三、表創建
DROP TABLE QRTZ_FIRED_TRIGGERS; DROP TABLE QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE QRTZ_SCHEDULER_STATE; DROP TABLE QRTZ_LOCKS; DROP TABLE QRTZ_SIMPLE_TRIGGERS; DROP TABLE QRTZ_SIMPROP_TRIGGERS; DROP TABLE QRTZ_CRON_TRIGGERS; DROP TABLE QRTZ_BLOB_TRIGGERS; DROP TABLE QRTZ_TRIGGERS; DROP TABLE QRTZ_JOB_DETAILS; DROP TABLE QRTZ_CALENDARS; -- 存儲每一個已配置的 Job 的詳細信息 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) ); comment on table QRTZ_JOB_DETAILS is '存放一個jobDetail信息'; -- Add comments to the columns comment on column QRTZ_JOB_DETAILS.sched_name is '調度器名,集群環境中使用,必須使用同一個名稱——集群環境下”邏輯”相同的scheduler,默認為QuartzScheduler'; comment on column QRTZ_JOB_DETAILS.job_name is '集群中job的名字'; comment on column QRTZ_JOB_DETAILS.job_group is '集群中job的所屬組的名字'; comment on column QRTZ_JOB_DETAILS.job_class_name is '集群中個note job實現類的完全包名,quartz就是根據這個路徑到classpath找到該job類 '; comment on column QRTZ_JOB_DETAILS.is_durable is '是否持久化,把該屬性設置為1,quartz會把job持久化到數據庫中'; comment on column QRTZ_JOB_DETAILS.job_data is '一個blob字段,存放持久化job對象'; -- 存儲已配置的 Trigger 的信息 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) ); -- Add comments to the table comment on table QRTZ_TRIGGERS is '觸發器的基本信息'; -- Add comments to the columns comment on column QRTZ_TRIGGERS.sched_name is '調度器名'; comment on column QRTZ_TRIGGERS.trigger_name is '觸發器的名字'; comment on column QRTZ_TRIGGERS.trigger_group is '觸發器所屬組的名字'; comment on column QRTZ_TRIGGERS.job_name is 'qrtz_job_details表job_name的外鍵 '; comment on column QRTZ_TRIGGERS.job_group is 'qrtz_job_details表job_group的外鍵 '; comment on column QRTZ_TRIGGERS.description is '描述'; comment on column QRTZ_TRIGGERS.next_fire_time is '下一次觸發時間'; comment on column QRTZ_TRIGGERS.prev_fire_time is '上一次觸發時間'; comment on column QRTZ_TRIGGERS.priority is '線程優先級'; comment on column QRTZ_TRIGGERS.trigger_state is '當前trigger狀態,設置為ACQUIRED,如果設置為WAITING,則job不會觸發 '; comment on column QRTZ_TRIGGERS.trigger_type is '觸發器類型'; comment on column QRTZ_TRIGGERS.start_time is '開始時間'; comment on column QRTZ_TRIGGERS.end_time is '結束時間'; comment on column QRTZ_TRIGGERS.calendar_name is '日歷名稱'; comment on column QRTZ_TRIGGERS.misfire_instr is 'Misfire處理規則,1代表【以當前時間為觸發頻率立刻觸發一次執,然后按照Cron頻率依次執行】,2代表【不觸發立即執行,等待下次Cron觸發頻率到達時刻開始按照Cron頻率依次執行】,-1代表【以錯過的第一個頻率時間立刻開始執行,重做錯過的所有頻率周期后當下一次觸發頻率發生時間大於當前時間后,再按照正常的Cron頻率依次執行】'; comment on column QRTZ_TRIGGERS.job_data is 'JOB存儲對象'; -- 存儲 Cron Trigger,包括 Cron 表達式和時區信息 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) ); -- Add comments to the table comment on table QRTZ_CRON_TRIGGERS is '存放cron類型的觸發器'; -- Add comments to the columns comment on column QRTZ_CRON_TRIGGERS.sched_name is '集群名'; comment on column QRTZ_CRON_TRIGGERS.trigger_name is '調度器名,qrtz_triggers表trigger_name的外鍵 '; comment on column QRTZ_CRON_TRIGGERS.trigger_group is 'qrtz_triggers表trigger_group的外鍵 '; comment on column QRTZ_CRON_TRIGGERS.cron_expression is 'cron表達式 '; comment on column QRTZ_CRON_TRIGGERS.time_zone_id is '時區ID'; -- 存儲少量的有關 Scheduler 的狀態信息,和別的 Scheduler 實例(假如是用於一個集群中) CREATE TABLE qrtz_scheduler_state ( SCHED_NAME VARCHAR2(120) NOT NULL, INSTANCE_NAME VARCHAR2(200) NOT NULL, LAST_CHECKIN_TIME NUMBER(13) NOT NULL, CHECKIN_INTERVAL NUMBER(13) NOT NULL, CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) ); -- Add comments to the table comment on table QRTZ_SCHEDULER_STATE is '調度器狀態'; -- Add comments to the columns comment on column QRTZ_SCHEDULER_STATE.sched_name is '調度器名稱,集群名'; comment on column QRTZ_SCHEDULER_STATE.instance_name is '集群中實例ID'; comment on column QRTZ_SCHEDULER_STATE.last_checkin_time is '上次檢查時間'; comment on column QRTZ_SCHEDULER_STATE.checkin_interval is '檢查時間間隔'; -- 存儲與已觸發的 Trigger 相關的狀態信息,以及相聯 Job 的執行信息 CREATE TABLE qrtz_fired_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, ENTRY_ID VARCHAR2(95) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, INSTANCE_NAME VARCHAR2(200) NOT NULL, FIRED_TIME NUMBER(13) NOT NULL, SCHED_TIME NUMBER(13) NOT NULL, PRIORITY NUMBER(13) NOT NULL, STATE VARCHAR2(16) NOT NULL, JOB_NAME VARCHAR2(200) NULL, JOB_GROUP VARCHAR2(200) NULL, IS_NONCONCURRENT VARCHAR2(1) NULL, REQUESTS_RECOVERY VARCHAR2(1) NULL, CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID) ); -- 存儲簡單的 Trigger,包括重復次數,間隔,以及已觸的次數 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_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) ); -- Trigger 作為 Blob 類型存儲(用於 Quartz 用戶用 JDBC 創建他們自己定制的 Trigger 類型,<span style="color:#800080;">JobStore</span> 並不知道如何存儲實例的時候) CREATE TABLE qrtz_blob_triggers ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_NAME VARCHAR2(200) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, BLOB_DATA BLOB NULL, CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ); -- 以 Blob 類型存儲 Quartz 的 Calendar 信息 CREATE TABLE qrtz_calendars ( SCHED_NAME VARCHAR2(120) NOT NULL, CALENDAR_NAME VARCHAR2(200) NOT NULL, CALENDAR BLOB NOT NULL, CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) ); -- 存儲已暫停的 Trigger 組的信息 CREATE TABLE qrtz_paused_trigger_grps ( SCHED_NAME VARCHAR2(120) NOT NULL, TRIGGER_GROUP VARCHAR2(200) NOT NULL, CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) ); -- 存儲程序的悲觀鎖的信息(假如使用了悲觀鎖) CREATE TABLE qrtz_locks ( SCHED_NAME VARCHAR2(120) NOT NULL, LOCK_NAME VARCHAR2(40) NOT NULL, CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME) ); create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);