​分布式定时任务框架Quartz

前言

项目中总要写那么几个定时任务来处理一些事情。一些简单的定时任务使用Spring自带的定时任务就能完成。但是如果需要大量的定时任务的话要怎么才能统一管理呢?

本文介绍Quartz分布式调度框架。

介绍

Quartz介绍

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统。 目前是 Terracotta 旗下的一个项目。官网地址 http://www.quartz-scheduler.org/ 可以 下载 Quartz 的发布版本及其源代码。

特点

  • 集成方便(完全使用Java编写)
  • 无需依赖可集群部署也可单机运行
  • 可以通过JVM独立运行

Job

创建一个任务只需要实现Job接口即可

触发器

  • 可以通过 Calendar 执行(排除节假日)
  • 指定某个时间无线循环执行 比如每五分钟执行一次
  • 固定时间执行 例如每周周一上午十点执行

一般情况使用SimpleTrigger,和CronTrigger,这些触发器实现了Trigger接口。或者 ScheduleBuilder 子类 SimpleScheduleBuilder和CronScheduleBuilder。

对于简单的时间来说,比如每天执行几次,使用SimpleTrigger。对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger以及CromExpression 类。

注意 :一个job可以被多个Trigger 绑定,但是一个Trigger只能绑定一个job

存储

有两种存储方式 RAMJobStore和 JDBCJobStore 。

RAMJobStore不需要外部数据库调度信息存储在JVM内存中 所以,当应用程序停止运行时,所有调度信息将被丢失存储多少个Job和Trigger也会受到限制。

JDBCJobStore 支持集群所有触发器和job都存储在数据库中无论服务器停止和重启都可以恢复任务同时支持事务处理。

实战

准备

上面简单的介绍了一下Quartz,然后现在开始实战,本文使用SpringBoot整合。

项目地址:https://gitee.com/lqlm/toolsList_lqcoder

首先创建数据库表因为太多了就不房子文章中了可以去官方网站下载,也可以用我的下载地址下载

地址: https://lqcoder.com/quartz.sql

创建完成之后:

Table Name
Description
QRTZ_CALENDARS
存储Quartz的Calendar信息
QRTZCRONTRIGGERS
存储CronTrigger,包括Cron表达式和时区信息
QRTZFIREDTRIGGERS
存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息
QRTZPAUSEDTRIGGER_GRPS 存储已暂停的Trigger组的信息
QRTZSCHEDULERSTATE
存储少量的有关Scheduler的状态信息,和别的Scheduler实例
QRTZ_LOCKS
存储程序的悲观锁的信息
QRTZJOBDETAILS
存储每一个已配置的Job的详细信息
QRTZJOBLISTENERS
存储有关已配置的JobListener的信息
QRTZSIMPLETRIGGERS
存储简单的Trigger,包括重复次数、间隔、以及已触的次数
QRTZBLOGTRIGGERS
Trigger作为Blob类型存储
QRTZTRIGGERLISTENERS
存储已配置的TriggerListener的信息
QRTZ_TRIGGERS
存储已配置的Trigger的信息

本文统一使用Cron方式来创建。

注意:cron方式需要用到的4张数据表:qrtztriggers,qrtzcrontriggers,qrtzfiredtriggers,qrtzjob_details

整合项目

创建一个SpringBoot项目然后加入quart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值