QuartzScheduler

官方网站:http://www.quartz-scheduler.org Github:https://github.com/quartz-scheduler/quartz

Quatz 是一个特性丰富的,开源的任务调度库,它几乎可以嵌入所有的 Java 程序,从很小的独立应用程序到大型商业系统。Quartz 可以用来创建成百上千的简单的或者复杂的任务,这些任务可以用来执行任何程序可以做的事情。Quartz 拥有很多企业级的特性,包括支持 JTA 事务和集群。

Quartz 是一个老牌的任务调度系统,98 年构思,01 年发布到 sourceforge。现在更新比较慢,因为已经非常成熟了。Quartz 的目的就是让任务调度更加简单,开发人员只需要关注业务即可。他是用 Java 语言编写的(也有.NET 的版本)。Java 代码能做的任何事情,Quartz 都可以调度。

特点:

  1. 精确到毫秒级别的调度

  2. 可以独立运行,也可以集成到容器中

  3. 支持事务(JobStoreCMT )

  4. 支持集群

  5. 支持持久化

Quartz的基本使用

引入依赖:

<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz</artifactId> 
    <version>2.3.0</version> 
</dependency>

编写代码:

Quartz的体系结构

图 1

Trigger

触发器是用于触发任务的时间规则,Trigger类使用TriggerBuilder构建,Trigger 接口在 Quartz 有 4 个继承的子接口:

子接口

描述

特点

SimpleTrigger

简单触发器

固定时刻或时间间隔,毫秒

CalendarIntervalTrigger

基于日历的触发器

比简单触发器更多时间单位,支持非固定时间的触发,例如一年可能 365/366,一个月可能 28/29/30/31

DailyTimeIntervalTrigger

基于日期的触发器

每天的某个时间

CronTrigger

基于 Cron 表达式的触发器

JobDetail

JobDetail代表一个具体的任务,他由JobBuilder构建。JobBuilder使用关联对象Job(任务模板)以及JobDataMap 模板参数,具体构建一个任务对象。

Scheduler

调度器由SchedulerFactory创建,创建出的调度器都是单例的。调度器调度任务需要两个对象:JobDetailTrigger,调度器会在对应的时间点执行任务。

Scheduler中的方法主要分为三大类:

  1. 操作调度器本身,例如调度器的启动start()、调度器的关闭shutdown()

  2. 操作Trigger,例如pauseTriggers()resumeTrigger()

  3. 操作Job,例如scheduleJob()unscheduleJob()rescheduleJob()

Listener

Listener是用于监听任务生命周期的监听器。他通过观察者模式,监听SchedulerTriggerJobDeatil

通常使用Listener监听任务的执行状态,然后做出相关的业务操作或者通知。

TriggerListener

方法
作用或执行实际

getName()

返回监听器的名称

triggerFired()

Trigger 被触发,Job 上的 execute() 方法将要被执行时,Scheduler 就调用这个方法

vetoJobExecution()

在 Trigger 触发后,Job 将要被执行时由 Scheduler 调用这个方法。TriggerListener 给了一个选择去否决 Job 的执行。假如这个方法返回 true,这个 Job 将不会为此次 Trigger 触发而得到执行

triggerMisfired()

Trigger 错过触发时调用

triggerComplete()

Trigger 被触发并且完成了 Job 的执行时,Scheduler 调用这个方法

JobListener

SchedulerListener

JobStore

RAMJobStore

JDBCJobStore

Quartz的配置文件

org.quartz.core 包下,有一个默认的配置文件,quartz.properties。当我们没有定义一个同名的配置文件的时候,就会使用默认配置文件里面的配置,他的默认配置如下:

如果要修改上述中的配置,可以在resource下,建立一个同包名,同文件名的配置文件,以覆盖默认的配置。

最后更新于

这有帮助吗?