springboot-整合quartz:做分布式定时任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yhhyhhyhhyhh/article/details/84235374

springboot-整合quartz:做分布式定时任务

完整代码下载链接:

https://github.com/2010yhh/springBoot-demos.git

环境

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继续执行
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yhhyhhyhhyhh/article/details/84235374