springBoot + Quartz

本文介绍了Quartz,一个由OpenSymphony开源组织开发的Java任务调度框架,现为Terracotta旗下项目。Quartz具有强大的调度功能、灵活性和分布式能力,并能轻松与Spring集成。文章讲解了Quartz的核心元素,包括Scheduler、Trigger、Calendar和JobDetail,以及如何在SpringBoot项目中配置和使用Quartz进行任务调度,并提到了集群配置和数据库相关设置。
摘要由CSDN通过智能技术生成

1. Quartz 概述

Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目。读者可以到下载Quartz 的发布版本及其源代码。

2. Quartz特点

作为一个优秀的开源调度框架,Quartz 具有以下特点:

  1. 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;
  2. 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;
  3. 分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升。
  4. 作为 Spring 默认的调度框架,Quartz 很容易与 Spring 集成实现灵活可配置的调度功能。

quartz调度核心元素:

  • Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
  • Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多,本文主要介绍这种方式。CronTrigger在spring中封装在CronTriggerFactoryBean中。
  • Calendar:它是一些日历特定时间点的集合。一个trigger可以包含多个Calendar,以便排除或包含某些时间点。
  • JobDetail:用来描述Job实现类及其它相关的静态信息,如Job名字、关联监听器等信息。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean两种实现,如果任务调度只需要执行某个类的某个方法,就可以通过MethodInvokingJobDetailFactoryBean来调用。
  • Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap实例中。实现Job接口的任务,默认是无状态的,若要将Job设置成有状态的,在quartz中是给实现的Job添加@DisallowConcurrentExecution注解(以前是实现StatefulJob接口,现在已被Deprecated),在与spring结合中可以在spring配置文件的jobDetail中配置concurrent参数。

3. 集群配置

quartz集群是通过数据库表来感知其他的应用的,各个节点之间并没有直接的通信。只有使用持久的JobStore才能完成Quartz集群。

  • 数据库表:以前有12张表,现在只有11张表,现在没有存储listener相关的表,多了QRTZ_SIMPROP_TRIGGERS表。
  • 建表SQL:下载,不同数据库有不同的表。

表名

说明

备注

QRTZ_CALENDARS

以 Blob 类型存储 Quartz 的 Calendar 信息

 

QRTZ_CRON_TRIGGERS

存储 Cron Trigger,包括 Cron 表达式和时区信息

 

QRTZ_FIRED_TRIGGERS

存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息

 

QRTZ_PAUSED_TRIGGER_GRPS

存储已暂停的 Trigger 组的信息

 

QRTZ_SCHEDULER_STATE

存储少量的有关 Scheduler 的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)

 

QRTZ_LOCKS

存储程序的悲观锁的信息(假如使用了悲观锁)

 

QRTZ_JOB_DETAILS

存储每一个已配置的 Job 的详细信息

 

QRTZ_JOB_LISTENERS

存储有关已配置的 JobListener 的信息

 

QRTZ_TRIGGER_LISTENERS

存储已配置的 TriggerListener 的信息

 

QRTZ_BLOG_TRIGGERS

Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)

 

QRTZ_TRIGGERS

存储已配置的 Trigger 的信息

 

QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表,包括以下几个锁:

  • CALENDAR_ACCESS
  • JOB_ACCESS
  • MISFIRE_ACCESS
  • STATE_ACCESS
  • TRIGGER_ACCESS

4. 创建项目

4.1 下载项目,运行看结果和流程;

4.2 Maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactI
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值