springboot-整合quartz:做分布式定时任务
完整代码下载链接:
https://github.com/2010yhh/springBoot-demos/tree/master/springboot-quartz-cluster
环境
idea2018,jdk1.8,
springboot版本:springboot1.5.9.RELEASE,
1.quartz应用场景
应用中会有很多定时任务需要执行,一台服务器已经不能满足使用,需要解决定时任务单机单点故障问题
用Quartz框架,在集群环境下,通过数据库锁机制来实现定时任务的执行;独立的 Quartz 节点并不与另一其的节点或是管理节点通信。Quartz 应用是通过数据库表来感知到另一应的。
注意:集群环境下,时钟应当要同步
2配置
quartz下载:
http://www.quartz-scheduler.org/downloads/
解压后需要,运行tables_mysql_innodb.sql创建表(解压后如在D:\软件\quartz-2.2.3-distribution\quartz-2.2.3\docs\dbTables下)
qrtz_blob_triggers : 以Blob 类型存储的触发器。
qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。
qrtz_cron_triggers:存放cron类型的触发器。
qrtz_fired_triggers:存放已触发的触发器。
qrtz_job_details:存放一个jobDetail信息。
qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。
qrtz_paused_trigger_graps:存放暂停掉的触发器。
qrtz_scheduler_state:调度器状态。
qrtz_simple_triggers:简单触发器的信息。
qrtz_trigger_listeners:触发器监听器。qrtz_triggers:触发器的基本信息。
cron方式需要用到的4张数据表:
qrtz_triggers,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details
pom需要:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
3.测试
项目中可以在监听器中初始化所有的job或者做成动态可修改、可管理的job。job1设置10s,job2设置30s
1)启动1个进程server.port=8080
2)启动2个进程,会发现,job1和job2交替的在2个进程中执行,同一时刻同一个job只有一个进程在执行
server.port=8080 的进程
server.port=8090的进程
3)关掉一个进程,另一个进程会接管所有job继续执行
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/18391.html