SpringBoot Quartz 集群

SpringBoot +Quartz + Mybatis + LayUI
通过数据库实现了Quartz集群。

一个动态管理Quartz任务的例子。不需要重启服务,即可以增加、修改、删除、停止、启动任务。
官网:http://www.quartz-scheduler.org/
SQL脚本

本例中使用的是MySQL数据库。
在resources\db目录下,需要创建quartz数据库,和sys_job表。
集群功能需要创建11张表:
在官网的Downloads链接中,提供了11张表的建表语句: quartz-2.2.3-distribution\quartz-2.2.3\docs\dbTables 2.3版本之后在这个路径下:src\org\quartz\impl\jdbcjobstore

注意:如果修改了任务的类名或者路径,因为任务已经保存在数据库中,需要清空上述11张表和sys_job重新添加。
否则启动会报错。

测试说明

如果直接在数据库修改了任务,启动之前,必须清空quartz的11张表,参考:resources/db/清空表脚本
启动工程,访问: http://localhost:9096/job/jobList
第三个任务是发送邮件的任务,SQL语句需要修改为自己的QQ账号和授权码,不需要可以把状态改成0或者删掉。
代码说明

需要运行的任务类放在task包下面,必须实现BaseJob接口。
config下面的类是保证SpringBoot工程启动的时候任务可以运行。
JobFactory是保证Spring的对象可以注入到Job里面。
最核心的类是 SchedulerUtil。
并发功能说明

在Job类上添加@DisallowConcurrentExecution 注解以后,任务就不会并行执行。
比如Task1,休眠60s(代表任务执行耗时60s),即使运行频率是1秒一次,在60s内也只会执行一次。
这时会造成其后的任务misfire(错过触发)。当正在执行的任务数超过线程池大小时,也会发生这种情况。
比如Task1去掉@DisallowConcurrentExecution 注解,如果1次运行60s,最多也只有10个Task1在运行。
造成misfire以后怎么办?CronTrigger和SimpleTrigger有不同的策略。
集群功能测试

复制多个工程,修改端口启动服务。 可以看到任务会随机地分配到几个机器,但是一定不会重复执行。

停掉一个或者多个服务,其他的服务会检测到,并接管任务。

代码:git@github.com:liuyun888/springboot-quartz.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云上凯歌

好活,当赏!

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

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

打赏作者

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

抵扣说明:

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

余额充值