SpringBoot整合Quartz作为调度中心完整实用例子

https://www.cnblogs.com/ealenxie/p/9134602.html

因为想要做一个类似于调度中心的东西,定时执行一些Job(通常是一些自定义程序或者可执行的jar包),搭了一个例子,总结了前辈们的相关经验和自己的一些理解,如有雷同或不当之处,望各位大佬见谅和帮忙指正。

由于之前有许多小伙伴问过我如何写个定时任务,里面写上逻辑自己的逻辑,我另做了一个SpringBoot完全整合Quartz的简单例子

可以作为Quartz的入门参考 : https://github.com/EalenXie/springboot-quartz-simple

 

本例子是整合Quartz作为调度中心使用的。

1.首先新建项目SpringBoot-Quartz ,选用的技术栈为 SpringBoot + Quartz + Spring Data Jpa。完整代码可见(本文已非最新代码,最新见Github) : https://github.com/EalenXie/SpringBoot-Quartz

pom.xml依赖 : 

复制代码

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6     <groupId>name.ealenxie</groupId>
 7     <artifactId>SpringBoot-Quartz</artifactId>
 8     <version>1.0</version>
 9     <parent>
10         <groupId>org.springframework.boot</groupId>
11         <artifactId>spring-boot-starter-parent</artifactId>
12         <version>2.0.1.RELEASE</version>
13     </parent>
14     <dependencies>
15         <dependency>
16             <groupId>org.springframework.boot</groupId>
17             <artifactId>spring-boot-starter-data-jpa</artifactId>
18         </dependency>
19         <dependency>
20             <groupId>org.springframework.boot</groupId>
21             <artifactId>spring-boot-starter-web</artifactId>
22         </dependency>
23         <dependency>
24             <groupId>mysql</groupId>
25             <artifactId>mysql-connector-java</artifactId>
26             <scope>runtime</scope>
27         </dependency>
28         <dependency> <!--quartz依赖-->
29             <groupId>org.quartz-scheduler</groupId>
30             <artifactId>quartz</artifactId>
31             <version>2.2.3</version>
32         </dependency>
33         <dependency>
34             <groupId>org.springframework</groupId>
35             <artifactId>spring-context-support</artifactId>
36         </dependency>
37         <dependency>
38             <groupId>org.quartz-scheduler</groupId>
39             <artifactId>quartz-jobs</artifactId>
40             <version>2.2.3</version>
41         </dependency>
42     </dependencies>
43 </project>

复制代码

 

2.你需要在数据库中建立Quartz的相关系统表,所以你需要在数据库中执行如下来自Quartz官方的脚本

复制代码

  1 -- in your Quartz properties file, you'll need to set org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  2 -- 你需要在你的quartz.properties文件中设置org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  3 -- StdJDBCDelegate说明支持集群,所有的任务信息都会保存到数据库中,可以控制事物,还有就是如果应用服务器关闭或者重启,任务信息都不会丢失,并且可以恢复因服务器关闭或者重启而导致执行失败的任务
  4 -- This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM
  5 -- 这是来自quartz的脚本,在MySQL数据库中创建以下的表,修改为使用INNODB而不是MYISAM
  6 -- 你需要在数据库中执行以下的sql脚本
  7 DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
  8 DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
  9 DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
 10 DROP TABLE IF EXISTS QRTZ_LOCKS;
 11 DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
 12 DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
 13 DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
 14 DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
 15 DROP TABLE IF EXISTS QRTZ_TRIGGERS;
 16 DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
 17 DROP TABLE IF EXISTS QRTZ_CALENDARS;
 18 -- 存储每一个已配置的Job的详细信息
 19 CREATE TABLE QRTZ_JOB_DETAILS(
 20 SCHED_NAME VARCHAR(120) NOT NULL,
 21 JOB_NAME VARCHAR(200) NOT NULL,
 22 JOB_GROUP VARCHAR(200) NOT NULL,
 23 DESCRIPTION VARCHAR(250) NULL,
 24 JOB_CLASS_NAME VARCHAR(250) NOT NULL,
 25 IS_DURABLE VARCHAR(1) NOT NULL,
 26 IS_NONCONCURRENT VARCHAR(1) NOT NULL,
 27 IS_UPDATE_DATA VARCHAR(1) NOT NULL,
 28 REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
 29 JOB_DATA BLOB NULL,
 30 PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
 31 ENGINE=InnoDB;
 32 -- 存储已配置的Trigger的信息
 33 CREATE TABLE QRTZ_TRIGGERS (
 34 SCHED_NAME VARCHAR(120) NOT NULL,
 35 TRIGGER_NAME VARCHAR(200) NOT NULL,
 36 TRIGGER_GROUP VARCHAR(200) NOT NULL,
 37 JOB_NAME VARCHAR(200) NOT NULL,
 38 JOB_GROUP VARCHAR(200) NOT NULL,
 39 DESCRIPTION VARCHAR(250) NULL,
 40 NEXT_FIRE_TIME BIGINT(13) NULL,
 41 PREV_FIRE_TIME BIGINT(13) NULL,
 42 PRIORITY INTEGER NULL,
 43 TRIGGER_STATE VARCHAR(16) NOT NULL,
 44 TRIGGER_TYPE VARCHAR(8) NOT NULL,
 45 START_TIME BIGINT(13) NOT NULL,
 46 END_TIME BIGINT(13) NULL,
 47 CALENDAR_NAME VARCHAR(200) NULL,
 48 MISFIRE_INSTR SMALLINT(2) NULL,
 49 JOB_DATA BLOB NULL,
 50 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
 51 FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
 52 REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
 53 ENGINE=InnoDB;
 54 -- 存储已配置的Simple Trigger的信息
 55 CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
 56 SCHED_NAME VARCHAR(120) NOT NULL,
 57 TRIGGER_NAME VARCHAR(200) NOT NULL,
 58 TRIGGER_GROUP VARCHAR(200) NOT NULL,
 59 REPEAT_COUNT BIGINT(7) NOT NULL,
 60 REPEAT_INTERVAL BIGINT(12) NOT NULL,
 61 TIMES_TRIGGERED BIGINT(10) NOT NULL,
 62 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
 63 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
 64 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
 65 ENGINE=InnoDB;
 66 -- 存储Cron Trigger,包括Cron表达式和时区信息
 67 CREATE TABLE QRTZ_CRON_TRIGGERS (
 68 SCHED_NAME VARCHAR(120) NOT NULL,
 69 TRIGGER_NAME VARCHAR(200) NOT NULL,
 70 TRIGGER_GROUP VARCHAR(200) NOT NULL,
 71 CRON_EXPRESSION VARCHAR(120) NOT NULL,
 72 TIME_ZONE_ID VARCHAR(80),
 73 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
 74 FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
 75 REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
 76 ENGINE=InnoDB;
 77 CREATE TABLE QRTZ_SIMPROP_TRIGGERS
 78   (
 79     SCHED_NAME VARCHAR(120) NOT NULL,
 80     TRIGGER_NAME VARCHAR(200) NOT NULL,
 81     TRIGGER_GROUP VARCHAR(200) NOT NULL,
 82     STR_PROP_1 VARCHAR(512) NULL,
 83     STR_PROP_2 VARCHAR(512) NULL,
 84     STR_PROP_3 VARCHAR(512) NULL,
 85     INT_PROP_1 INT NULL,
 86     INT_PROP_2 INT NULL,
 87     LONG_PROP_1 BIGINT NULL,
 88     LONG_PROP_2 BIGINT NULL,
 89     DEC_PROP_1 NUMERIC(13,4) NULL,
 90     DEC_PROP_2 NUMERIC(13,4) NULL,
 91     BOOL_PROP_1 VARCHAR(1) NULL,
 92     BOOL_PROP_2 VARCHAR(1) NULL,
 93     PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
 94     FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
 95     REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
 96 ENGINE=InnoDB;
 97 --  Trigger作为Blob类型存储(用于Quartz用户用JDBC创建他们自己定制的Trigger类型,JobStore并不知道如何存储实例的时候)
 98 CREATE TABLE QRTZ_BLOB_TRIGGERS (
 99 SCHED_NAME VARCHAR(120) NOT NULL,
100 TRIGGER_NAME VARCHAR(200) NOT NULL,
101 TRIGGER_GROUP VARCHAR(200) NOT NULL,
102 BLOB_DATA BLOB NULL,
103 PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
104 INDEX (SCHED_NAME,TRIGGER_NAME, TRIG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_world!

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值