关键词:
之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
如果,我们需要在系统意外(或非意外)重新启动后,仍保留定时任务信息,可以使用数据库存储定时任务信息。
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
存储在MySQL中:
由于需要连接MySQL数据库,需要加上数据库的JDBC驱动,这里以pom形式下载,也可以直接引入包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency>
然后需要在数据库中建一些Quartz的表,MySQL的建、删表脚本如下。如果你使用的是其他数据库,可以下载Quartz的distribution,在\docs\dbTables下。
1 # 2 # Quartz seems to work best with the driver mm.mysql-2.0.7-bin.jar 3 # 4 # PLEASE consider using mysql with innodb tables to avoid locking issues 5 # 6 # In your Quartz properties file, you'll need to set 7 # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 8 # 9 10 DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; 11 DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; 12 DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; 13 DROP TABLE IF EXISTS QRTZ_LOCKS; 14 DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; 15 DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; 16 DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; 17 DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; 18 DROP TABLE IF EXISTS QRTZ_TRIGGERS; 19 DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; 20 DROP TABLE IF EXISTS QRTZ_CALENDARS; 21 22 23 CREATE TABLE QRTZ_JOB_DETAILS 24 ( 25 SCHED_NAME VARCHAR(120) NOT NULL, 26 JOB_NAME VARCHAR(200) NOT NULL, 27 JOB_GROUP VARCHAR(200) NOT NULL, 28 DESCRIPTION VARCHAR(250) NULL, 29 JOB_CLASS_NAME VARCHAR(250) NOT NULL, 30 IS_DURABLE VARCHAR(1) NOT NULL, 31 IS_NONCONCURRENT VARCHAR(1) NOT NULL, 32 IS_UPDATE_DATA VARCHAR(1) NOT NULL, 33 REQUESTS_RECOVERY VARCHAR(1) NOT NULL, 34 JOB_DATA BLOB NULL, 35 PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) 36 ); 37 38 CREATE TABLE QRTZ_TRIGGERS 39 ( 40 SCHED_NAME VARCHAR(120) NOT NULL, 41 TRIGGER_NAME VARCHAR(200) NOT NULL, 42 TRIGGER_GROUP VARCHAR(200) NOT NULL, 43 JOB_NAME VARCHAR(200) NOT NULL, 44 JOB_GROUP VARCHAR(200) NOT NULL, 45 DESCRIPTION VARCHAR(250) NULL, 46 NEXT_FIRE_TIME BIGINT(13) NULL, 47 PREV_FIRE_TIME BIGINT(13) NULL, 48 PRIORITY INTEGER NULL, 49 TRIGGER_STATE VARCHAR(16) NOT NULL, 50 TRIGGER_TYPE VARCHAR(8) NOT NULL, 51 START_TIME BIGINT(13) NOT NULL, 52 END_TIME BIGINT(13) NULL, 53 CALENDAR_NAME VARCHAR(200) NULL, 54 MISFIRE_INSTR SMALLINT(2) NULL, 55 JOB_DATA BLOB NULL, 56 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 57 FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) 58 REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) 59 ); 60 61 CREATE TABLE QRTZ_SIMPLE_TRIGGERS 62 ( 63 SCHED_NAME VARCHAR(120) NOT NULL, 64 TRIGGER_NAME VARCHAR(200) NOT NULL, 65 TRIGGER_GROUP VARCHAR(200) NOT NULL, 66 REPEAT_COUNT BIGINT(7) NOT NULL, 67 REPEAT_INTERVAL BIGINT(12) NOT NULL, 68 TIMES_TRIGGERED BIGINT(10) NOT NULL, 69 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 70 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 71 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 72 ); 73 74 CREATE TABLE QRTZ_CRON_TRIGGERS 75 ( 76 SCHED_NAME VARCHAR(120) NOT NULL, 77 TRIGGER_NAME VARCHAR(200) NOT NULL, 78 TRIGGER_GROUP VARCHAR(200) NOT NULL, 79 CRON_EXPRESSION VARCHAR(200) NOT NULL, 80 TIME_ZONE_ID VARCHAR(80), 81 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 82 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 83 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 84 ); 85 86 CREATE TABLE QRTZ_SIMPROP_TRIGGERS 87 ( 88 SCHED_NAME VARCHAR(120) NOT NULL, 89 TRIGGER_NAME VARCHAR(200) NOT NULL, 90 TRIGGER_GROUP VARCHAR(200) NOT NULL, 91 STR_PROP_1 VARCHAR(512) NULL, 92 STR_PROP_2 VARCHAR(512) NULL, 93 STR_PROP_3 VARCHAR(512) NULL, 94 INT_PROP_1 INT NULL, 95 INT_PROP_2 INT NULL, 96 LONG_PROP_1 BIGINT NULL, 97 LONG_PROP_2 BIGINT NULL, 98 DEC_PROP_1 NUMERIC(13,4) NULL, 99 DEC_PROP_2 NUMERIC(13,4) NULL, 100 BOOL_PROP_1 VARCHAR(1) NULL, 101 BOOL_PROP_2 VARCHAR(1) NULL, 102 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 103 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 104 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 105 ); 106 107 CREATE TABLE QRTZ_BLOB_TRIGGERS 108 ( 109 SCHED_NAME VARCHAR(120) NOT NULL, 110 TRIGGER_NAME VARCHAR(200) NOT NULL, 111 TRIGGER_GROUP VARCHAR(200) NOT NULL, 112 BLOB_DATA BLOB NULL, 113 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), 114 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 115 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 116 ); 117 118 CREATE TABLE QRTZ_CALENDARS 119 ( 120 SCHED_NAME VARCHAR(120) NOT NULL, 121 CALENDAR_NAME VARCHAR(200) NOT NULL, 122 CALENDAR BLOB NOT NULL, 123 PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) 124 ); 125 126 CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS 127 ( 128 SCHED_NAME VARCHAR(120) NOT NULL, 129 TRIGGER_GROUP VARCHAR(200) NOT NULL, 130 PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) 131 ); 132 133 CREATE TABLE QRTZ_FIRED_TRIGGERS 134 ( 135 SCHED_NAME VARCHAR(120) NOT NULL, 136 ENTRY_ID VARCHAR(95) NOT NULL, 137 TRIGGER_NAME VARCHAR(200) NOT NULL, 138 TRIGGER_GROUP VARCHAR(200) NOT NULL, 139 INSTANCE_NAME VARCHAR(200) NOT NULL, 140 FIRED_TIME BIGINT(13) NOT NULL, 141 SCHED_TIME BIGINT(13) NOT NULL, 142 PRIORITY INTEGER NOT NULL, 143 STATE VARCHAR(16) NOT NULL, 144 JOB_NAME VARCHAR(200) NULL, 145 JOB_GROUP VARCHAR(200) NULL, 146 IS_NONCONCURRENT VARCHAR(1) NULL, 147 REQUESTS_RECOVERY VARCHAR(1) NULL, 148 PRIMARY KEY (SCHED_NAME,ENTRY_ID) 149 ); 150 151 CREATE TABLE QRTZ_SCHEDULER_STATE 152 ( 153 SCHED_NAME VARCHAR(120) NOT NULL, 154 INSTANCE_NAME VARCHAR(200) NOT NULL, 155 LAST_CHECKIN_TIME BIGINT(13) NOT NULL, 156 CHECKIN_INTERVAL BIGINT(13) NOT NULL, 157 PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) 158 ); 159 160 CREATE TABLE QRTZ_LOCKS 161 ( 162 SCHED_NAME VARCHAR(120) NOT NULL, 163 LOCK_NAME VARCHAR(40) NOT NULL, 164 PRIMARY KEY (SCHED_NAME,LOCK_NAME) 165 ); 166 167 168 commit;
这个脚本除了给出建、删表语句,也给出了org.quartz.jobStore.driverDelegateClass配置,此项配置到quartz.properties中
注:你可能也注意到了,这些表都是以QRTZ_为前缀的,这是默认的前缀。如果你需要用到其他前缀(个性化需求,或需要配置多个quartz实例),可以在以下项配置(在quartz.properties中)
org.quartz.jobStore.tablePrefix = QRTZ_
最主要的修改是quartz.properties
1 org.quartz.scheduler.instanceName = MyScheduler 2 org.quartz.threadPool.threadCount = 3 3 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 4 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 5 org.quartz.jobStore.tablePrefix = QRTZ_ 6 org.quartz.jobStore.dataSource = myDS 7 8 org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver 9 org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/ll?characterEncoding=utf-8 10 org.quartz.dataSource.myDS.user = root 11 org.quartz.dataSource.myDS.password = 123456 12 org.quartz.dataSource.myDS.maxConnections = 5
OK了,然后我们可以启动Bootstrap类,注册、运行定时任务。你可以发现MySQL的表中已经有此定时任务的记录了。
然后你可以停止Bootstrap类,将Bootstrap类中关于注册、启动定时任务的代码删除或注释,然后启动Bootstrap类,看上一次操作注册的定时任务会不会继续运行。
springboot整合quartz实现动态的创建或删除定时任务并将定时调度任务持久化到mysql以及quartz集群配置(代码片段)
1.创建quartz数据库并导入quartz的SQL脚本文件quartz源码下载地址:http://www.quartz-scheduler.org/downloads/下载完成后解压,在/src/org/quartz/impl/jdbcjobstore可以找到对应数据库的SQL脚本我这里使用的是MySQL数据库,SQL脚本如下:... 查看详情
springboot整合quartz实现动态的创建或删除定时任务并将定时调度任务持久化到mysql以及quartz集群配置(代码片段)
1.创建quartz数据库并导入quartz的SQL脚本文件quartz源码下载地址:http://www.quartz-scheduler.org/downloads/下载完成后解压,在/src/org/quartz/impl/jdbcjobstore可以找到对应数据库的SQL脚本我这里使用的是MySQL数据库,SQL脚本如下:... 查看详情
springboot整合quartz定时任务(持久化到数据库)(代码片段)
1,添加maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>2,配置文件增加配置spring:quartz:data-source:type:com.alibaba.druid.pool.DruidDataSourcedriverClassName:c... 查看详情
springboot整合quartz定时任务(持久化到数据库)(代码片段)
1,添加maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>2,配置文件增加配置spring:quartz:data-source:type:com.alibaba.druid.pool.DruidDataSourcedriverClassName:c... 查看详情
springboot定时任务quartz整合(多数据源+quartz持久化到数据库)(代码片段)
核心实现思想:多数据源实现:通过后台配置多个数据源,自定义注解,通过aop配置注解切面,前端调用需要传递数据源参数,根据判断数据源参数,调用相应的service或mapper方法。(1条消息)Springboot整... 查看详情
分布式定时任务调度框架-quartz学习及实战记录笔记
...合Quartz实现动态的创建或删除定时任务并将定时调度任务持久化到MySQL以及Quartz集群配置7.分布式定时任务调度框架学习与实战记录完整篇 查看详情
分布式定时任务调度框架-quartz学习及实战记录笔记
...合Quartz实现动态的创建或删除定时任务并将定时调度任务持久化到MySQL以及Quartz集群配置7.分布式定时任务调度框架学习与实战记录完整篇 查看详情
spring整合quartz并持久化
spring整合quartz有两种方式:一.常见是使用配置文件,将定时任务保存到内存中简单示例: Xml代码 <!-- 短信催还提醒任务调度 --> <bean id="overdueRecall" class="com.sursen.souba.ddlibser... 查看详情
深入quartz,更优雅地管理你的定时任务(代码片段)
...dulerQuartz进阶使用多触发器的定时任务Job中注入BeanQuartz的持久化最近在工作遇到了定时任务场景,因此特地对定时任务相关知识进行了调研,记录在此,后文中使用的代码已经上传到Github:ht 查看详情
深入quartz,更优雅地管理你的定时任务(代码片段)
...dulerQuartz进阶使用多触发器的定时任务Job中注入BeanQuartz的持久化最近在工作遇到了定时任务场景,因此特地对定时任务相关知识进行了调研,记录在此,后文中使用的代码已经上传到Github:https://github.com/ThinkMugz/sp... 查看详情
spring整合quartz并持久化
spring整合quartz有两种方式:一.常见是使用配置文件,将定时任务保存到内存中简单示例: Xml代码 <!-- 短信催还提醒任务调度 --> <bean id="overdueRecall" class="com.sursen.souba.ddlibser... 查看详情
quartz持久化到数据库后,执行任务之前或之后,任务状态变为error的解决奇招
Quartz项目上线后,工程应用和数据库在同一台服务器上,然后经常是一个任务正常执行完之后,任务状态变为了ERROR,网上找了很多 1.有的说quartz版本2.1.7有问题,换版本就好了,但是我的工程不是2.1.7版本,然后我把2.2.1-2.3.... 查看详情
一行代码完成定时任务调度,基于quartz的ui可视化操作组件gzy.quartz.mui
...tartup中注入的UI组件目前完成了第二个版本,1.增加本地json持久化调度任务,无需数据库2.增加直接调用本地类方法,无需通过WebAPI接口.本篇主要是介绍一下这两个新增的功能.正文一.增加本地json持久化调度任务,无需数据库 ... 查看详情
quartz+springboot实现动态管理定时任务
...、启动、暂定等。思路将每个人员信息的定时配置保存到数据库中,这样实现了任务的动态展示和管理。任务的每一次新增或变更,都会去数据库变更信息。设置一个统一的任务管理器,专门负责动态任务的增删改查。POM依赖<... 查看详情
quartz定时任务第一次不执行
随时往quartz数据库中添加定时任务,通过一个定时任务每天定点去启动quartz数据库中的任务,但是,quartz数据库中的第一次添加的任务不会执行,比如:0589**?,添加这个任务,必须到明天的这个点才执行。请高手指点,谢谢。... 查看详情
quartz定时任务触发器启动时设置(代码片段)
需求为了将触发器的Cron表达式放在数据库里,方便维护。所以需要在项目启动时去数据库获取Cron表达式,并配置触发器,添加到调度器里。实现在配置定时任务相关的Bean时,通过设置init方法,实现配置Bean时执行从数据库获取C... 查看详情
javaweb定时任务---quartz
...。 第一步还是需要写自己的任务类,如果有涉及到对数据库的增删改查操作,就按照正常的action,servi 查看详情
springboot整合quartz集群环境实现动态定时任务配置原
...: 1.在项目中引入jar 2.将需要的表导入数据库 官网上有不同数据库的脚本,找到对应的,导入即可 3.java代码 将quartz 查看详情