700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 100个定时任务_Quartz 定时任务使用 —— Trigger介绍(十二)

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

时间:2022-06-17 16:54:01

相关推荐

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

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)

|

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。