Quartz API核心接口有Scheduler:(调度器)与scheduler交互的主要API;
Job:(作业)你通过scheduler执行任务,你的任务类需要实现的接口;
JobDetail:(作业实例)定义Job的实例;
Trigger:(触发器)触发Job的执行;
JobBuilder:定义和创建JobDetail实例的接口;
TriggerBuilder:定义和创建Trigger实例的接口;
一、触发器接口基本介绍//触发器状态
TriggerState
|-publicenumTriggerState{NONE,NORMAL,PAUSED,COMPLETE,ERROR,BLOCKED}
|-NONE无
|-NORMAL正常状态
|-PAUSED暂停状态
|-COMPLETE完成
|-ERROR错误
|-BLOCKED堵塞
//执行完成时状态
CompletedExecutionInstruction
|-publicenumCompletedExecutionInstruction{
NOOP,RE_EXECUTE_JOB,SET_TRIGGER_COMPLETE,DELETE_TRIGGER,
SET_ALL_JOB_TRIGGERS_COMPLETE,SET_TRIGGER_ERROR,SET_ALL_JOB_TRIGGERS_ERROR}
|-NOOP无
|-RE_EXECUTE_JOB重复执行
|-SET_TRIGGER_COMPLETE触发器执行完成
|-DELETE_TRIGGER删除触发器
|-SET_ALL_JOB_TRIGGERS_COMPLETE所有作业和触发器执行完成
|-SET_TRIGGER_ERROR触发器执行错误
|-SET_ALL_JOB_TRIGGERS_ERROR设置所有都是错误的
TriggerTimeComparator
getKey获取触发器key值
getJobKey获取作业key
getDescription获取面熟
getCalendarName获取日历名称
getJobDataMap获取作业数据map
getPriority获取优先级
mayFireAgain是否重复执行
getStartTime开始时间
getEndTime结束时间
getNextFireTime下一次执行时间
getPreviousFireTime上一执行时间
getFireTimeAfter(DateafterTime)获取某个时间后的运行时间
getFinalFireTime获取最后执行时间
getMisfireInstruction获取失败策略
getTriggerBuilder获取触发器建造者
getScheduleBuilder获取调度类建造者
equals
compareTo
//失败策略
MISFIRE_INSTRUCTION_SMART_POLICY
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
DEFAULT_PRIORITY
二、Trigger的公共属性
所有类型的trigger都有TriggerKey这个属性,表示trigger的身份;除此之外,trigger还有很多其它的公共属性。这些属性,在构建trigger的时候可以通过TriggerBuilder设置。jobKey:当trigger触发时被执行的job的身份;
startTime:设置trigger第一次触发的时间。
endTime:表示trigger失效的时间点。比如,”每月第5天执行”的trigger,如果其endTime是6月1号,则其最后一次执行时间是6月5号。
其它的属性,会在下面的小节中解释。
priority:优先级
如果你的trigger很多(或者Quartz线程池的工作线程太少),Quartz可能没有足够的资源同时触发所有的trigger;这种情况下,你可能希望控制哪些trigger优先使用Quartz的工作线程,要达到该目的,可以在trigger上设置priority属性。比如,你有N个trigger需要同时触发,但只有Z个工作线程,优先级最高的Z个trigger会被首先触发。如果没有为trigger设置优先级,trigger使用默认优先级,值为5;priority属性的值可以是任意整数,正数、负数都可以。
注意:只有同时触发的trigger之间才会比较优先级。10:59触发的trigger总是在11:00触发的trigger之前执行。
注意:如果trigger是可恢复的,在恢复后再调度时,优先级与原trigger是一样的。
misfire:错过触发
trigger还有一个重要的属性misfire;如果scheduler关闭了,或者Quartz线程池中没有可用的线程来执行job,此时持久性的trigger就会错过(miss)其触发时间,即错过触发(misfire)。不同类型的trigger,有不同的misfire机制。它们默认都使用“智能机制(smart policy)”,即根据trigger的类型和配置动态调整行为。当scheduler启动的时候,查询所有错过触发(misfire)的持久性trigger。然后根据它们各自的misfire机制更新trigger的信息。当你在项目中使用Quartz时,你应该对各种类型的trigger的misfire机制都比较熟悉,这些misfire机制在JavaDoc中有说明。关于misfire机制的细节,会在讲到具体的trigger时作介绍。
calendar:日历
Quartz的Calendar对象(不是java.util.Calendar对象)可以在定义和存储trigger的时候与trigger进行关联。Calendar用于从trigger的调度计划中排除时间段。比如,可以创建一个trigger,每个工作日的上午9:30执行,然后增加一个Calendar,排除掉所有的商业节日。
Trigger 触发器实现类Trigger(org.quartz)
|-CalendarIntervalTrigger(org.quartz)日期触发器
||-CalendarIntervalTriggerImpl(org.quartz.impl.triggers)
|
|-MutableTrigger(org.quartz.spi)
||-OperableTrigger(org.quartz.spi)
|