Quartz管中窥豹之概念简介

Quartz是一个开源的作业调度框架,由美国Terracotta公司收购,旗下还收购有Java开源的缓存项目Ehcache。Quartz可以与Java EE、Java SE应用程序结合或者单独使用。现研究版本为2.2.x。

概念

核心元素

Quartz 任务调度的核心元素是 scheduler, triggerjob,其中 trigger 和 job 是任务调度的元数据,scheduler 是实际执行调度的控制器。下面是几个概念:

概念 描述
scheduler 任务调度器
trigger 触发器,用于定义任务调度时间规则
job 任务,即被调度的任务
misfire 错过的,指本来应该在指定的触发时间执行但实际没有被执行的任务调度

他们的关系图为:

quartz_meta_data_relation

调度工厂负责创建任务调度类,由任务调度类进行任务调度。由Job实现类实现具体的作业任务逻辑,具体任务的触发由触发器定义触发规则。一个任务可以同时由多个触发器规则定义。触发器定义了任务的调度周期、频率等触发规则。

代码参见

触发器接口类:org.quartz.Trigger

调度器接口类:org.quartz.Scheduler

调度器工厂接口类:org.quartz.SchedulerFactory

作业任务接口类:org.quartz.Job

标准调度器工厂:org.quartz.impl.StdSchedulerFactory

标准调度器:org.quartz.impl.StdScheduler

触发器类型

Quartz 中主要提供了四种Trigger触发器实现接口类型:

SimpleTrigger、CronTirgger、CalendarIntervalTrigger、DailyTimeIntervalTrigger

下面是触发器类型的简要描述:

触发类型 描述
SimpleTrigger 简单触发器。一般适用于周期性任务,可指定开始时间、时间间隔和重复次数,重复次数-1表示无限次数,可能受到触发任务的影响
CronTirgger Cron表达式触发器。类似LINUX上的任务调度命令 crontab,使用Cron表达式来表示时间调度方式,参见【4、4、4 Cron 表达式】
CalendarIntervalTrigger 日历触发器。基于日历的时间间隔。适用于每N(getRepeatInterval())日历时间单元。例如,每5个月执行。如果是每月月底或最后几天应该用CronTrigger
DailyTimeIntervalTrigger 日期触发器。最适合调度类似每 N(getRepeatInterval())秒,分,时等任务,可指定每周特定的星期。例一,每天8:00-11:00每72分触发。那么每天都是8:00, 9:12, 10:24触发。例二,每周工作日(星期一到星期五)9:20-16:47 每23分触发。

下面是触发器层级关系图:

trigger_tree

代码参见

触发器主要计算前次触发时间、下次触发时间和错过触发任务处理策略,触发器还有优先级定义等等

trigger

存储方式

Quartz还定义了Job和Trigger的存储方式,决定是否持久化等等。可以在默认的配置文件quartz.properties文件中指定存储方式,下面是主要的存储方式。

1、RAMJobStore:默认设置,将作业数据保存在内存中,可以说是最快的,主要不足是缺乏数据的持久性。当应用程序或系统崩溃时,所有信息都会丢失,Quartz的所有的工作数据都必须重建。配置:

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

2、JDBCJobStore:能够持久化作业数据到数据库中。程序重启时可以恢复Quartz,支持各种主流数据库。但同时带来性能的降低和复杂性的提高。配置:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

3、TerracottaJobStore:使用Terracotta server(分布式缓存)存储数据,性能介于前两者之间。这里前提需要搭建Terracotta缓存集群。配置:

org.quartz.jobStore.class = org.terracotta.quartz.TerracottaJobStore
org.quartz.jobStore.tcConfigUrl: localhost:9510

此外还有一些第三方的JobStore,可以使用Nosql持久化数据,如redis,mongodb等等。

代码参见

任务存储接口类:org.quartz.spi.JobStore

主要定义了Job的存储、删除、暂停、恢复和Trigger的CRUD操作,还有其他额外的方法等等等等。

当然,Quartz还提供了监听器和插件的扩展。还有更多的介绍可以移步官网

参考

官网:http://www.quartz-scheduler.org/

github:https://github.com/quartz-scheduler/quartz

发表评论

电子邮件地址不会被公开。 必填项已用*标注

12 + 16 = ?