一. Job方面的接口
一.一 Job接口
Quartz 框架提供了 org.quartz.Job 接口,开发者需要实现这个接口,让框架知道,开发者自定义的工作任务是什么。
package org.quartz; public interface Job { void execute(JobExecutionContext context) throws JobExecutionException; }
里面只有一个方法, execute()。
里面的参数 JobExecutionContext 对象,是 作业运行上下文对象,可以获取作业的相关信息。
一.二 JobExecutionContext
用于获取上下文对象的内容。
主要方法有:
一.三 JobBuilder
一.三.一 作用
是建造者模式, 通过 JobBuilder 来创建 JobDetail。
需要绑定 一.一 里面的作业类,来表示执行的是哪一个作业。
一个作业,可以被多个触发器触发, 一个作业,也可以被多次绑定,虽然同一个Job,执行的内容是一致的,但是作业运行上下文对象是不一样的,
为了区分不同的作业,需要给当前这个作业设置一个独一无二的id, 设置job的编号和组的编号,就是 JobKey。 job的编号是必须的,组的名称可以不设置。
主要方法有:
可以链式编程,方法返回的都是 this 当前对象 。
一.三.二 常用方法
一.四 JobKey
存储 JobBuilder 创建时,传递过来的 job编号和组名
package org.quartz; import org.quartz.utils.Key; public final class JobKey extends Key<JobKey> { private static final long serialVersionUID = -6073883950062574010L; public JobKey(String name) { super(name, null); } public JobKey(String name, String group) { super(name, group); } public static JobKey jobKey(String name) { return new JobKey(name, null); } public static JobKey jobKey(String name, String group) { return new JobKey(name, group); } }
JobBuilder 传递过来时,withIdentity(name,group)
public JobBuilder withIdentity(String name, String group) { key = new JobKey(name, group); return this; }
一.五 JobDataMap
最终继承 java.util.Map 接口,也是 Key-value 类型的 Map接口, 用于存放数据。
一.六 JobDetail
真正被调用的接口, 通过JobBuilder 通过建造者模式创建出来,可以获取它的相关信息
Job方面的接口,大概就是这六个。
二. Trigger 方面的接口
二.一 TriggerBuilder
二.一.一 作用
建造者模式,用于创建 Trigger。
可以设置 开始的时间, 可以设置立即启动, 可以设置结束的时间,也可以设置Trigger的标识名和组名,可以设置调度器(多长时间运行一次,运行几次)。 调度器与开始的时间进行关联, 构建 什么时候开始执行,多长时间运行一次,运行几次,一个完整的任务链。
可以链式编程, 返回的是 this 当前对象。
二.一.二 常用方法
二.二 TriggerKey
Trigger 触发器的标识, 与JobKey 类似
package org.quartz; import org.quartz.utils.Key; public final class TriggerKey extends Key<TriggerKey> { private static final long serialVersionUID = 8070357886703449660L; public TriggerKey(String name) { super(name, null); } public TriggerKey(String name, String group) { super(name, group); } public static TriggerKey triggerKey(String name) { return new TriggerKey(name, null); } public static TriggerKey triggerKey(String name, String group) { return new TriggerKey(name, group); } }
TriggerBuilder 传递过来时,withIdentity(name, group)
public TriggerBuilder<T> withIdentity(String name, String group) { key = new TriggerKey(name, group); return this; }
二.三 ScheduleBuilder
有四个实现类
但常用的,只有两个, SimpleScheduleBuilder 和 CronScheduleBuilder
SimpleScheduleBuilder 是通过方法来定义,隔多长时间执行一次,执行几次。 什么时候开始执行,在 TriggerBuilder 里面定义。
CronScheduleBuilder 是通过 cron 表达式,来定义多长时间执行一次,执行几次和什么时候开始执行。
二.四 SimpleScheduleBuilder
二.四.一 作用
里面定义了很多方法, 有second(秒),minute(分钟),hour(小时) 来定义,每隔多长时间再次执行一次, 也定义了执行的次数。
如果上升到天,月和周的话,就需要开发者自己进行处理时间了。
以second 秒进行举例
提供了两种方式, 静态方法和普通方法设置时间间隔和次数。
发现,以 repeatSecondlyForever(int seconds) 为例:
public static SimpleScheduleBuilder repeatSecondlyForever(int seconds) { return simpleSchedule() .withIntervalInSeconds(seconds) .repeatForever(); }
内部调用了非静态的方法。
读者可以自行进行选择使用哪一种方式, 比较喜欢静态的方式,写起来简单。
二.四.二 常用方法
以second 秒 进行举例。
提示: 当使用普通方法时,repeatForever()不能单独使用,withRepeatCount(int triggerRepeatCount)也不能单独使用,
Exception in thread “main” org.quartz.SchedulerException: Repeat Interval cannot be zero
必须要与 withIntervalInSeconds(int intervalInSeconds) 方法同时使用。
但可以单独使用 withIntervalInSeconds(int intervalInSeconds) 方法,这时只执行一次。
二.五 CronScheduleBuilder
关于 CronScheduleBuilder, 后面会有专门的章节进行讲解。
三. Scheduler 方面的接口
三.一 StdSchedulerFactory
工厂模式,用于创建 调度 Scheduler,有一个方法 getDefaultScheduler(), 用于获取 Scheduler
public static Scheduler getDefaultScheduler() throws SchedulerException { StdSchedulerFactory fact = new StdSchedulerFactory(); return fact.getScheduler(); }
由于 StdSchedulerFactory 的构造方法是 public, 所以有两种方式可以获取 Scheduler
三.一.一 静态方法 getDefaultScheduler()获取
Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();
三.一.二 构造方法 获取
StdSchedulerFactory stdSchedulerFactory=new StdSchedulerFactory(); Scheduler scheduler=stdSchedulerFactory.getScheduler();
静态方法内部实际调用的是构造方法。
建议采用第一种方式 进行获取 Scheduler
三.二 Scheduler
用于关联 JobDetail 和 Trigger, 并且可以启动和停止调度。
谢谢您的观看!!!