Quartz定时框架完成持久化操作——Spring Boot

简介

用quartz管理任务计划很方便,但是当使用数据库作为存储介质的时候,必须要先创建表,不然就会报错。以下是要使用MySQL时的建表语句。

#  
# In your Quartz properties file, you'll need to set   
# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate  
#  
#  
# By: Ron Cordell - roncordell  
#  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.  
  
DROP TABLE IF EXISTS QRTZ_JOB_LISTENERS;  
DROP TABLE IF EXISTS QRTZ_TRIGGER_LISTENERS;  
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_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;  
CREATE TABLE QRTZ_JOB_DETAILS(  
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_VOLATILE VARCHAR(1) NOT NULL,  
IS_STATEFUL VARCHAR(1) NOT NULL,  
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,  
JOB_DATA BLOB NULL,  
PRIMARY KEY (JOB_NAME,JOB_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_JOB_LISTENERS (  
JOB_NAME VARCHAR(200) NOT NULL,  
JOB_GROUP VARCHAR(200) NOT NULL,  
JOB_LISTENER VARCHAR(200) NOT NULL,  
PRIMARY KEY (JOB_NAME,JOB_GROUP,JOB_LISTENER),  
INDEX (JOB_NAME, JOB_GROUP),  
FOREIGN KEY (JOB_NAME,JOB_GROUP)  
REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_TRIGGERS (  
TRIGGER_NAME VARCHAR(200) NOT NULL,  
TRIGGER_GROUP VARCHAR(200) NOT NULL,  
JOB_NAME VARCHAR(200) NOT NULL,  
JOB_GROUP VARCHAR(200) NOT NULL,  
IS_VOLATILE VARCHAR(1) 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 (TRIGGER_NAME,TRIGGER_GROUP),  
INDEX (JOB_NAME, JOB_GROUP),  
FOREIGN KEY (JOB_NAME,JOB_GROUP)  
REFERENCES QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_SIMPLE_TRIGGERS (  
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 (TRIGGER_NAME,TRIGGER_GROUP),  
INDEX (TRIGGER_NAME, TRIGGER_GROUP),  
FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP)  
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_CRON_TRIGGERS (  
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 (TRIGGER_NAME,TRIGGER_GROUP),  
INDEX (TRIGGER_NAME, TRIGGER_GROUP),  
FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP)  
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_BLOB_TRIGGERS (  
TRIGGER_NAME VARCHAR(200) NOT NULL,  
TRIGGER_GROUP VARCHAR(200) NOT NULL,  
BLOB_DATA BLOB NULL,  
PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP),  
INDEX (TRIGGER_NAME, TRIGGER_GROUP),  
FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP)  
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_TRIGGER_LISTENERS (  
TRIGGER_NAME VARCHAR(200) NOT NULL,  
TRIGGER_GROUP VARCHAR(200) NOT NULL,  
TRIGGER_LISTENER VARCHAR(200) NOT NULL,  
PRIMARY KEY (TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER),  
INDEX (TRIGGER_NAME, TRIGGER_GROUP),  
FOREIGN KEY (TRIGGER_NAME,TRIGGER_GROUP)  
REFERENCES QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_CALENDARS (  
CALENDAR_NAME VARCHAR(200) NOT NULL,  
CALENDAR BLOB NOT NULL,  
PRIMARY KEY (CALENDAR_NAME))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (  
TRIGGER_GROUP VARCHAR(200) NOT NULL,  
PRIMARY KEY (TRIGGER_GROUP))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_FIRED_TRIGGERS (  
ENTRY_ID VARCHAR(95) NOT NULL,  
TRIGGER_NAME VARCHAR(200) NOT NULL,  
TRIGGER_GROUP VARCHAR(200) NOT NULL,  
IS_VOLATILE VARCHAR(1) NOT NULL,  
INSTANCE_NAME VARCHAR(200) NOT NULL,  
FIRED_TIME BIGINT(13) NOT NULL,  
PRIORITY INTEGER NOT NULL,  
STATE VARCHAR(16) NOT NULL,  
JOB_NAME VARCHAR(200) NULL,  
JOB_GROUP VARCHAR(200) NULL,  
IS_STATEFUL VARCHAR(1) NULL,  
REQUESTS_RECOVERY VARCHAR(1) NULL,  
PRIMARY KEY (ENTRY_ID))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_SCHEDULER_STATE (  
INSTANCE_NAME VARCHAR(200) NOT NULL,  
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,  
CHECKIN_INTERVAL BIGINT(13) NOT NULL,  
PRIMARY KEY (INSTANCE_NAME))  
ENGINE=InnoDB;  
  
CREATE TABLE QRTZ_LOCKS (  
LOCK_NAME VARCHAR(40) NOT NULL,  
PRIMARY KEY (LOCK_NAME))  
ENGINE=InnoDB;  
  
INSERT INTO QRTZ_LOCKS values('TRIGGER_ACCESS');  
INSERT INTO QRTZ_LOCKS values('JOB_ACCESS');  
INSERT INTO QRTZ_LOCKS values('CALENDAR_ACCESS');  
INSERT INTO QRTZ_LOCKS values('STATE_ACCESS');  
INSERT INTO QRTZ_LOCKS values('MISFIRE_ACCESS');  
commit;   
  • 表创建完成后刷新,生成的表如下图!!
    在这里插入图片描述
  • 然后再往下这个表格,是图中十一个表的作用!!
表名简介
qrtz_blob_triggersTrigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
qrtz_calendars以 Blob 类型存储 Quartz 的 Calendar 信息
qrtz_cron_triggers存储 Cron Trigger,包括 Cron 表达式和时区信息
qrtz_fired_triggers存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
qrtz_job_details存储每一个已配置的 Job 的详细信息
qrtz_locks存储程序的非观锁的信息(假如使用了悲观锁)
qrtz_paused_trigger_grps存储已暂停的 Trigger 组的信息
qrtz_scheduler_state存储少量的有关 Scheduler 的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)
qrtz_simple_triggers存储简单的 Trigger,包括重复次数,间隔,以及已触的次数
qrtz_simprop_triggers存储CalendarIntervalTrigger和DailyTimeIntervalTrigger两种类型的触发器
qrtz_triggers存储已配置的 Trigger 的信息
  • 有了这十一个表之后,定时任务不会自动配置到表里面,也就是说无法完成定时任务的持久化操作,所以需要引入quartz.properties文件,属性如下!!
#============================================================================  
# Configure JobStore    
# Using Spring datasource in quartzJobsConfig.xml  
# Spring uses LocalDataSourceJobStore extension of JobStoreCMT  
#============================================================================ 
#============================================================================  
# Configure Main Scheduler Properties    
# Needed to manage cluster instances  
#============================================================================  
org.quartz.scheduler.instanceName=xwjTest
org.quartz.scheduler.instanceId=AUTO


org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
#more trigger acquired
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false


   
# Change this to match your DB vendor  
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.selectWithLockSQL=SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME \= ? 
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.dataSource=myDS  
#org.quartz.jobStore.txIsolationLevelReadCommitted = true 

org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
  
#============================================================================  
# Configure ThreadPool    
#============================================================================  
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#Configure DataSources
#代码复制过来以后只需要改变数据库连接池的配置信息即可完成数据库的持久化操作
org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/test?
org.quartz.dataSource.myDS.user=root
org.quartz.dataSource.myDS.password=hello   
  • 上述配置文件中的属性,可随意改变的只有三个值
    org.quartz.scheduler.instanceName是定时框架的名字。
    org.quartz.jobStore.tablePrefix = qrtz_是数据库中Quartz定时框架的表前缀。
    然后修改一下数据库连接池就可以直接运行项目,运行完成后再去查看数据库就有了要添加的定时任务!!!配置完成第一次启动会添加到库中,第二次启动可能会报错,因为第一次启动的时候已经完成了持久化操作,所以如果没有调用过删除的方法,就会报错,这个时候调用一下删除job的方法就可以啦!!!

    整合QUartz框架的java代码参考
    SpringBoot整合Quartz框架Java实用代码
    -
    最后看都看了,码字不易,留个赞再走吧!!!
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值