一、概述
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。
1.特性
- 支持多任务调度和管理,Quartz可以在数据库中存储多个定时任务进行作业调度,可以实现定时任务的增删改查等管理。
- 纯Java实现,可以作为独立的应用程序,也可以嵌入在另一个独立式应用程序运行。
- 强大的调度功能,Spring默认的调度框架,灵活可配置。
- 作业持久化,调度环境持久化机制,可以保存并恢复调度现场。系统关闭数据不会丢失;灵活的应用方式,可以任意定义触发器的调度时间表,支持任务和调度各种组合,组件式监听器、各种插件、线程池等功能,多种存储方式等。
- 分布式和集群能力,可以被实例化,一个Quartz集群中的每个节点作为一个独立的Quartz使用,通过相同的数据库表来感知到另一个Quartz应用。
2.使用场景
Quartz是一个分布式的任务调度框架,在分布式环境下需要进行任务调度可以使用。
3.同类框架对比
和Spring框架中的@schedule相比,他们都能基于cron表达式执行定时任务,但明显Quartz框架的能力更强,他可以对任务进行增删改查的操作。
二、原理
1.框架
Quartz主要包括JobDetail、Trigger和Scheduler三部分,JobDetail包含了任务的实现类和任务的描述信息,Trigger决定了任务什么时候执行,Scheduler是调度器,将JobDetail和Trigger结合起来,定时定频率的执行任务。
2.组成部分说明
(1)Job
表示一个需要定时执行的任务,只需要实现Job接口的execute()方法,该方法就是定时执行的操作。Quartz 每次调度 Job 时,都重新创建一个 Job 实例,因此它不接受多个 Job 的实例。
public interface Job { void execute(JobExecutionContext context) throws JobExecutionException; }
(2)JobDetail
JobDetail主要由JobKey(job的名字name和分组group)、JobClass、JobDataMap(任务相关的数据)、JobBuilder组成。他实际保存了Job的描述信息,以便运行时通过 newInstance() 的反射机制实例化 Job。<