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 都可以调度。
特点:
精确到毫秒级别的调度
可以独立运行,也可以集成到容器中
支持事务(JobStoreCMT )
支持集群
支持持久化
Quartz的基本使用
引入依赖:
编写代码:
Quartz的体系结构
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
创建,创建出的调度器都是单例的。调度器调度任务需要两个对象:JobDetail
和Trigger
,调度器会在对应的时间点执行任务。
Scheduler中的方法主要分为三大类:
操作调度器本身,例如调度器的启动
start()
、调度器的关闭shutdown()
。操作Trigger,例如
pauseTriggers()
、resumeTrigger()
。操作Job,例如
scheduleJob()
、unscheduleJob()
、rescheduleJob()
Listener
Listener
是用于监听任务生命周期的监听器。他通过观察者模式,监听Scheduler
、Trigger
、JobDeatil
。
通常使用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
下,建立一个同包名,同文件名的配置文件,以覆盖默认的配置。
最后更新于