​分布式定时任务框架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项目然后加入quartz依赖,同时也要加入c3p0的依赖因为quartz使用的数据库是和项目分开的。

  <!--spring boot集成quartz-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
  
Quartz是一种广泛使用的分布式定时作业调度框架,可用于在多台服务器上触发执行一组作业。以下是Quartz分布式定时任务框架的搭建步骤: 1. 安装数据库 Quartz框架需要一个持久性存储器来保存作业调度信息。选择一个数据库(如MySQL或Oracle)并创建Quartz的表结构。 2. 配置Quartz实例 在Quartz中,每个实例代表一个独立的调度器,可以在其上启动和停止作业调度。要配置Quartz实例,需要在代码中指定一些配置属性,例如数据库连接信息和调度器的名称。 3. 创建作业和触发器 在Quartz中,作业代表要执行的代码逻辑,而触发器则指定作业何时运行。可以使用Cron表达式来指定触发器的运行时间。要创建新的作业和触发器,请使用Quartz的API。 4. 创建分布式Quartz实例 为了使Quartz分布式环境中运行,需要在所有服务器上创建Quartz实例。这些实例应该使用相同的数据库,并且应该使用相同的配置属性。 5. 配置集群 在分布式环境中,Quartz需要一种机制来协调调度器的运行。可以通过使用第三方插件(如Terracotta)或Quartz提供的基于数据库的集群实现来实现这一点。 6. 启动Quartz实例 一旦完成了配置和集群设置,可以启动Quartz实例并开始调度作业。要启动Quartz实例,需要使用Quartz的API方法。 总之,搭建Quartz分布式定时任务框架需要一定的技术和经验。最好在熟悉Quartz框架之前不要尝试这个任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值