什么是Quartz
分享人:张强 。 这次介绍的是Quartz,任务调度框架,使用的还是比较多的。希望能帮到你,如果有错误的地方请留言,或者加qq137416943,欢迎交流。
视频:
width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=e0741km19dv&tiny=0&auto=0" allowfullscreen="">正文:
目录:
1.背景介绍
2.知识剖析
3.常见问题
4.编码实战
5.扩展思考
6.参考文献
7.更多讨论
1.背景介绍
什么是Quartz
Quartz是一个开源任务调度框架。当前版本2.2.3
Quartz是OpenSymphony开源组织在Job scheduling(时间调度)领域一个开源项目,(OpenSymphony——开源组织的峨眉派,它的每个开源项目都有自己独特的特点)任务调度:在某个有规律的时间点来执行某件事。时间的触发的条件可能非常复杂,有可能携带复杂的条件等。任务调度是操作系统的重要组成部分,而对于实时操作系统,任务调度直接影响其实时性能。JAVA中任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。
定时方式的实现方式包括但不限于下面这几个:
- JDK原生定时工具:java.util.Time;
- JDK对定时任务调度的线程池支持:ScheduledExecutor;
- 开源工具:Quartz;
- 开源工具:JCronTab。
2.知识剖析
Quartz特点
- 纯java实现,可以作为独立的应用程序,也可以嵌入在另一个独立式应用程序运行
- 强大的调度功能,Spring默认的调度框架,灵活可配置;
- 作业持久化,调度环境持久化机制,可以保存并恢复调度现场。系统关闭数据不会丢失;灵活的应用方式,可以任意定义触发器的调度时间表,支持任务和调度各种组合,组件式监听器、各种插件、线程池等功能,多种存储方式等;
- 分布式和集群能力,可以被实例化,一个Quartz集群中的每个节点作为一个独立的Quartz使用,通过相同的数据库表来感知到另一个Quartz应用
Quartz的三个核心概念
- 任务 Job 具体要执行的业务逻辑
- 触发器 Trigger 定义触发业务的时间规则
- 调度器 Scheduler 调度器去根据触发条件去调度任务执行
任务 Job和JobDetail
Job 实现业务逻辑任务的接口。Job接口只有一个“execute”方法,执行具体的业务逻辑,只有一个参数:JobExecutionContext
JobExecutionContext 储存Quartz运行时候的环境以及Job本身的数据
JobDetail 描述Job实例所包含的属性
JobDetail中比较重要的属性:
name 必须 任务名称 JobDetail.getKey()
group 必须 任务所在的组,不设定的话按默认(default)
jobClass job实现类
jobDataMap job需要的参数
JobDateMap
进行任务调度的时候JobDateMap存储在JobExecutionContext中;
JobDateMap用来装在任何可序列化的数据对象,job实例对象被执行的时候这些参数对象会传递给它;
JobDateMap实现Map接口,支持键值对,添加存取基本类型数据类型的方法
获取方式:
1.从Map中直接获取
2.在Job实现类中添加setter方法赋值
Trigger
触发器 触发job的执行
simplateTrigger 在一个指定时间段内执行一次作业任务或是在指定时间间隔内执行多次作业任务
CronTrigger 基于日历的作业调度器,基于cron表达式
通用属性:
JobKey 标识Job实例,触发器根据此指定job实例执行
StartTime 触发器的时间表首次被触发的时间,值为Java.util.Date
EndTime 触发器不再被触发的时间,值同上
cron表达式,Linux定时任务经常用到,这里格式一样
格式为 [秒] [分] [小时] [日] [月] [周] [年]
Scheduler
调度器
根据Trigger触发器调度Job,可以配置后台运行的线程、存储信息方式等,创建方式有两种:
StdSchedulerFactory可以通过xml或者properties进行声明式配置属性
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
DirectSchedulerFactory 属性需要用代码配置
DirectSchedulerFactory factory = DirectSchedulerFactory.getInstance();
Scheduler scheduler = factory.getScheduler();
3.常见问题
Quartz体系结构
Quartz体系结构
Job和JobDetail
任务的实现接口和绑定任务接口
Trigger
触发器,决定什么时候调用,用来触发执行Job。Quartz的两种Trigger:
SimpleTrigger 简单触发器,在一个指定时间段内执行一次作业任务或是在指定时间间隔内执行多次作业任务
CronTrigger 基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间。它可以设定非常复杂的触发时间表,基于cron表达式,比SimpleTrigger复杂、常用。
Scheduler
调度器,根据Trigger,定时定频率