Quartz简介
看到一个不错的使用quartz的总结博客,Mark一下。传送门:https://www.cnblogs.com/drift-ice/p/3817269.html
特点:
- 强大的调度功能
- 灵活的应用方式
- 分布式和集群能力
用的的设计模式
- Builder模式
- Factory模式
- 组件模式
- 链式写法
Quartz体系结构
核心概念
- 调度器(scheduler):将JobDetail和trigger绑定在一起。包括如下方法:
- start
- stop
- pause
- resume
- …
- 任务(JobDetail):包含任务的实现类和类的一些信息
- 触发器(trigger):决定任务什么时候被调用,有如下两种:
- SimpleTrigger(类似timer)
- CronTrigger(更复杂)
重要组成
- Job:接口
- JobDetail:
- JobBuilder:创建JobDetail的实例
- JobStore:接口
- Trigger:
- TriggerBuilder:创建Trigger的实例
- ThreadPool:
- Scheduler
- Calendar:一个Trigger可以和多个Calendar关联,以排除或包含某些时间点。
- 监听器:包括JobListener、TriggerListener、SchedulerListener。
Job&JobDetail
Job
Job接口非常容易实现,只有一个execute方法,类似TimerTask的run方法,在里面编写业务逻辑。
源码如下:
package org.quartz;
public abstract interface Job {
public abstract void execute(JobExecutionContext paramJobExecutionContext)
throws JobExecutionException;
}
Job实例在Quartz中的生命周期:
每次调度器执行job时,它在调用execute方法前会创建一个新的job实例。
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。
JobDetail
JobDetail为Job实例提供了很多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。
重要属性:
- name
- gruop:默认DEFAULT
- jobClass
- jobDataMap
JobExecutionContext
- 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execute()方法;
- Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。
JobDataMap
JobDataMap是什么
- 在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取。
- JobDataMap可以用来装载任何可序列化的数据对象,当Job实例对象被执行时这些参数对象会传递给它。
- JobDataMap实现了JDK的Map接口,并且添加了一些非常方便的方法用来存取基本数据类型。
获取JobDataMap的两种方式
- 从Map中直接获取
- Job实现类中添加setter方法对应JobDataMap的键值(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动地调用这些setter方法)
浅谈Trigger
Quartz中的触发器是用来告诉调度程序作业什么时候触发。即Trigger对象是用来触发执行Job的。
触发器通用属性
JobKey
表示job实例的标识,触发器被触发时,该指定的job实例会执行。
StartTime
表示触发器的时间表首次被触发的时间。它的值的类型是java.util.Date。
EndTime
指定触发器的不再被触发的时间。它的值是java.util.Date。
SimpleTrigger
在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务
需要注意的点:
- 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量
- 重复执行间隔必须为0或长整数
- 一旦被指定了endTime参数,那么它会==覆盖重复次数参数==的效果
CronTrigger
基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更常用。
- Cron表达式(类似Linux中的CronTable)
用于配置CronTrigger实例。
是由7个表达式组成的字符串,描述了时间表的详细信息。
格式:[秒] [分] [小时] [日] [月] [周] [年](中间有空格)
详解如下:http://www.cnblogs.com/yaowen/p/3779284.html
Cron表达式小提示
- ’L’和’W’可以组合使用
- 周字段英文字母不区分大小写即MON和mon相同
- 利用工具,在线生成。传送门:http://cron.qqe2.com
浅谈Scheduler
Scheduler-所有的Scheduler实例应该由SchedulerFactory来创建。
Scheduler的创建方式:
/*
* 创建Scheduler的方式一
*/
//创建Sche