Quartz任务调度
Quartz:任务调度框架
Quartz是一个开源的任务调度框架。主要用系统中定时、定期来执行一次或多次任务。Quartz完全使用Java开发,可以集成到各种规模的应用程序中。它能够承载成千上万的任务调度,并且支持集群。它支持将数据存储到数据库中以实现持久化,并支持绝大多数的数据库。它将任务与触发设计为松耦合,即一个任务可以对应多个触发器,这样能够轻松构造出极为复杂的触发策略。
涉及到的设计模式:builder模式、factory模式、组件模式、链式开发
核心概念:
任务(Job): 定义任务执行的任务,需要实现Job接口,重写execute方法。
触发器(Trigger):为任务设定出发条件,比如早上八点。
调度器(Scheduler):将任务与触发器相结合,注册到调度器中,待执行。
--------------------------------------------------------------------------------------
常用API
1、Job
概念:工作任务调度的接口,该接口中定义execute方法,类似JDK提供的TimeTask中的run方法,execute内部执行相应的业务处理逻辑。
生命周期:Job实例通过JobBuilder.new Job创建,Schedule调度器执行Job时,在execute前会创建一个新的Job实例,当调用完成后,关联的Job对象实例会被释放,释放的实例会被垃圾回收机制回收。
2、JobDetail
概念:JobDetail为Job实例提供了很多属性,以及JobDetailMap成员变量属性,用来存储该Job状态信息,调度器Schedule需要借助JobDetail对象来添加Job实例。
通过JobDetail我们可以获取到关于Job实例的信息如:getKey、getGroup、getClass等等;注意key必须指定,组名可以不指定。不指定时采用默认default组。
3、JobDataMap
概念:JobDataMap是一个底层实现java Map数据结构的一个类对象,主要用于给Job出入相应的参数,可以多种数据类型如String 、Long、Float等。所有的传入信息都是以Map 的键值对形式进行传入。
如果想传入一个Map对象可以先创建一个JobDataMap对象,然后通过usingJobData("key",map)传入,普通对象可直接在build创建JobDetail前调用usingDataMap("key",String)。
4、JobExecutionContext
获取Job运行环境上下文信息,通过JobExecutionContext可获取JobDetail信息,可获得Trigger出发器信息,可获取通过JobDataMap传入参数,可获取本次运行时间,下次运行时间等信息。
5、有状态无状态
无状态:是指的执行完一次Job任务后任务对象进行垃圾回收后不改变、不保存Job自身状态信息;
有状态:是指的执行后返回一定的Job信息并进行持久化到对象中,以便下次调用Job任务进行使用。
@PersistJobDataAfterExecution:通过此注解添加到Job类上可进行改变类的状态信息。
说明:构建有状态基本要素:
1、通过JobDetail初始化Job类;
2、Job类添加注解@PersistJobDataAfterExecution;
3、在Job类中创建私有成员变量用来保存状态信息;
4、执行Job获取JobDetail信息并修改成员变量
++count;
Object count1 = context.getJobDetail().getJobDataMap().put("count", count);
System.out.println("传入count计数:"+count1);
6、Simple触发器
SimpleTrigger触发器常用属性:
startAt开始时间
endAt结束时间
SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)重复时间间隔
SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5).withRepeatCount(1)重复次数,注意从0开始计算
7、CronTrigger触发器
CronTrigger触发器是一个类似日历一样的触发器,可以进行设置例如每个周一至周五9点值18点进行执行,执行频率等进行各种设置。
采用表达是生成器:.withSchedule(CronScheduleBuilder.cronSchedule(" * * * * * *"))
8、Scheduler
Scheduler调度器通过SchedulerFactory工厂创建。Scheduler主要用来进行组装任务与触发器注册到调度器中;启动触发器。Scheduler可返回Date任务注册时间。
注意:
使用一组参数java.util.properties来初始化调度器。
配置参数一般在quartz.properties文件中。
调用Scheduler方法初始化调用对象。
9、Quartz监听器
概念:Quartz监听器用于当任务调度中你所关心的事情发生时能及时获取这一事件的通知;在Quartz中监听器作用域主要分为两种全局监听、局部监听;Quartz监听器重要分为三种分别是:
JobListener:任务监听器
TriggerListener:触发器监听器
SchedulerListener:调度器监听器
三种创建方式基本雷同。
学习工程地址为:https://gitee.com/Axuduo/quartz_scheduling_framework