核心概念
Job
package org.quartz; //Job 接口定义,开发者实现即可 public abstract interface Job{ public abstract void execute(JobExecutionContext paramJobExcutionContext) throws JobExecutionException; }
注解
@DisallowConcurrentExecution:不要并发地执行Job的多个实例
@PersistJobDataAfterExecution:在成功执行Job后,更新JobDetail中JobDataMap数据
JobDetail
- Job的属性,名称,描述等
- JobDataMap:定义Job特例化的属性、名称、描述等。
- Durability:可持久化
- RequestRecovery:scheduler发生硬关闭,当scheduler重启后,该job会重新执行
Trigger
Job执行的时间点
公共属性
- jobKey:trigger触发时被执行的job身份
- startTime:trigger触发器第一次检测开始时间点
- endTime:trigger失效时间点
- priority:有N个trigger需要“同时”触发,但只有Z(Z<N)个工作线程,priority最高的Z的trigger会被首先触发。默认优先级为5
- misfire:如果scheduler关闭或者Quartz线程池中没有可用线程来执行job,就会misfire错过触发,不同的trigger有不同的misfire机制
常用trigger
- SimpleTrigger:简单的时间规则
- 开始时间
- 间隔时间
- 运行次数
- CronTrigger:支持cron表达式
Calendar
package org.quartz; public interface Calendar{ public boolean isTimeIncluded(long timeStamp); public long getNextIncludedTime(long timeStamp); }
timeStamp是单位为毫秒的时间戳
排除一些节假日可以使用:org.quartz.impl.HolidayCalendar方便地实现
Scheduler
任务调度器,需要把Job和Trigger注册到调度器中
三种行为:
- 启动(start)
- 暂停(stand-by)
- 停止(shutdown)
SchedulerFactory
任务调度器的工厂类,用于产生Schedule实例
JobExecutionContext
保存job运行时的信息,scheduler引用,trigger引用,jobDetail引用
如果是恢复后的job,isRecovering()返回true