java 100个定时任务_Quartz 定时任务使用 —— Trigger介绍(十二)

bc7fdfc03a181785f939cc7c3cabcadc.gif

Quartz API核心接口有Scheduler:(调度器)与scheduler交互的主要API;

Job:(作业)你通过scheduler执行任务,你的任务类需要实现的接口;

JobDetail:(作业实例)定义Job的实例;

Trigger:(触发器)触发Job的执行;

JobBuilder:定义和创建JobDetail实例的接口;

TriggerBuilder:定义和创建Trigger实例的接口;

一、触发器接口基本介绍// 触发器状态

TriggerState

|-public enum TriggerState { NONE, NORMAL, PAUSED, COMPLETE, ERROR, BLOCKED }

|-NONE 无

|-NORMAL 正常状态

|-PAUSED 暂停状态

|-COMPLETE 完成

|-ERROR 错误

|-BLOCKED 堵塞

// 执行完成时状态

CompletedExecutionInstruction

|-    public enum CompletedExecutionInstruction {

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(Date afterTime) 获取某个时间后的运行时间

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)

|  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值