Triggers

和 jobs 一样,触发器也很容易使用,但确实包含了各种可定制的选项,在充分使用Quartz之前,您需要了解并了解这些选项。另外,正如前面提到的,您可以选择不同类型的触发器来满足不同的调度需求。

后面将会深入讨论: Simple Triggers & Cron Triggers.

Common Trigger Attributes

除了所有触发器类型都有触发键(TriggerKey)属性来跟踪它们的特性之外,还有许多其他属性对所有触发器类型都是通用的。
当您正在构建触发器定义时,这些公共属性设置为 TriggerBuilder (下面的例子将会出现)。

  • jobKey

指示在触发器触发时应该执行的作业的标识

  • startTime

指示触发器的调度何时开始生效。

该值是一个 java.util.date 对象,它在给定的日历日期上定义了一个时间点。
对于某些触发器类型,触发器在开始时实际上会触发,而对于其他触发器,它只是标记了该调度应该开始执行的时间。
这意味着你可以在1月份的时候用“每月5天”这样的时间表来存储一个触发器,如果 startTime 属性设置为4月1日,那么就会在第一次触发前几个月。

  • endTime

指示何时不再执行触发器的调度。

换句话说,在6月5日的最后一段时间里,一个“每个月5日”和7月1日的结束时间的触发点将会被触发。

Priority

有时,当您有许多触发器(或您的石英线程池中很少的工作线程)时,Quartz可能没有足够的资源来立即触发所有计划在同一时间触发的触发器。

在这种情况下,您可能想要控制哪些触发器在可用的Quartz工作线程上优先被执行。为此,可以在触发器上设置优先级属性。如果 N 触发器同时触发,但是目前只有 Z 工作者线程可用,那么优先级最高的第一个 Z 触发器将首先被执行。
如果您没有在触发器上设置优先级,那么它将使用默认的优先级5。任何整数值都被允许为优先级,正或负。

注意

  • 优先级仅用于相同的触发时间

预定在10:59的触发点总是在一个预定在11点首先被触发。

  • 恢复的优先级

当检测到触发器的工作需要恢复时,它的恢复计划与最初的触发器相同。

Misfire Instructions

触发器的另一个重要特性是它的“错误指令”。

如果一个持久的触发器“错过”了它的触发时间,因为调度程序正在被关闭,或者因为 Quartz 的线程池中没有可用的线程来执行任务,那么就会发生错误。不同的触发器类型有不同的错误指示。默认情况下,他们使用“智能策略”指令——基于触发器类型和配置的动态行为。当调度器启动时,它会搜索任何被错误触发的持久触发器,然后根据各自配置的错误指示更新每个触发器。

当您在自己的项目中开始使用 Quartz 时,您应该熟悉在给定触发器类型上定义的错误指示,并在其JavaDoc中解释。关于错误指示的更详细的信息将在每个触发类型的教程中给出。

Calendars

Quartz Calendar

不是java.util。当触发器被定义并存储在调度程序中时,日历对象可以与触发器关联。日历是有用的,不包括时间块,从触发器的发射时间表。例如,您可以创建一个触发器,在每个工作日的上午9点30分触发一个作业,然后添加一个不包括所有业务假期的日历。

日历可以是任何实现日历接口的可序列化对象,它看起来是这样的:

The Calendar Interface

package org.quartz;public interface Calendar {public boolean isTimeIncluded(long timeStamp);public long getNextIncludedTime(long timeStamp);}

注意,这些方法的参数属于 long 类型。正如您可能猜到的,它们是毫秒格式的时间戳。这意味着日历可以将时间划分为毫秒。很有可能,你会对“封锁”一整天感兴趣。作为一个方便,Quartz 包含了类 org.quartz.impl。假期日历,就是这样。

日历必须通过 addCalendar(..) 方法实例化并通过调度程序注册。如果您使用假期日历,在实例化之后,您应该使用它的 addExcludedDate(日期日期) 方法来填充它,以便在您希望将其排除在调度之外的那些日子。同一个日历实例可以使用多个触发器,例如:

示例代码

HolidayCalendar cal = new HolidayCalendar();
cal.addExcludedDate( someDate );
cal.addExcludedDate( someOtherDate );sched.addCalendar("myHolidays", cal, false);Trigger t = newTrigger().withIdentity("myTrigger").forJob("myJob").withSchedule(dailyAtHourAndMinute(9, 30)) // execute job daily at 9:30.modifiedByCalendar("myHolidays") // but not on holidays.build();// .. schedule job with triggerTrigger t2 = newTrigger().withIdentity("myTrigger2").forJob("myJob2").withSchedule(dailyAtHourAndMinute(11, 30)) // execute job daily at 11:30.modifiedByCalendar("myHolidays") // but not on holidays.build();// .. schedule job with trigger2

在接下来的几节课中,将会给出触发点的 construction/building 的细节。
现在,只要相信上面的代码创建了两个触发器,每个触发器每天都被触发。但是,在日历排除的期间内发生的任何解雇都将被跳过。

参见 org.quartz.impl 日历包中有许多可能适合您的需要的日历实现。

目录导航

目录导航

Quartz 入门系列教程-04-Triggers 深入学习相关推荐

  1. 【ENVI入门系列】04.图像几何校正

    [ENVI入门系列]04.图像几何校正 (2014-09-23 10:15:13) 转载▼ 标签: 杂谈 分类: ENVI 版权声明:本教程涉及到的数据仅供练习使用,禁止用于商业用途. 目录 图像几何 ...

  2. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris

    数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...

  3. html5游戏制作入门系列教程(三)

    今天,我们继续一系列文章,使用HTML5的canvas组件进行游戏开发.接下来,我们将开始学习如何添加动画以及一些更有趣的功能.我 们的演示将包括一艘太空船飞越时空,并使用一个新的游戏元素 – 对话框 ...

  4. python亲和性分析_数据挖掘入门系列教程(一)之亲和性分析

    数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNo ...

  5. html5游戏制作入门系列教程(一)

    从今天开始,我们将开始HTML5游戏开发一系列的文章.在我们的第一篇文章中,我们将讲解在画布canvas上的基础工作,创建简单的对象,填充和事件处理程序.另外,要注意在这个阶段中,我们不会立即学习We ...

  6. PWN入门系列教程~(1)

    PWN入门系列教程~(1) 先来说下学习路线 大致分为以下几个部分 那么什么是PWN呢? 栈 函数调用栈 寄存器 函数调用栈的经典内存布局 先来说下学习路线 大致分为以下几个部分 学习基础:去学习一些 ...

  7. Power BI入门系列教程

    欢迎使用Power BI入门系列教程. 在接下来的4周里,我会向您介绍Excel和Power BI中最新和最强大功能的基本用法.如果您有着下面这些疑问: 想学习数据分析,不知道从什么工具入手? 从没有 ...

  8. 风辰的CUDA入门系列教程

    风辰的CUDA入门系列教程 1. CUDA简介 GPU是图形处理单元(Graphic Processing Unit)的简称,最初主要用于图形渲染.自九十年代开始,GPU的发展产生了较大的变化,NVI ...

  9. Linux pwn入门教程,pwn堆入门系列教程1

    pwn堆入门系列教程1 因为自己学堆的时候,找不到一个系统的教程,我将会按照ctf-wiki的目录一步步学下去,尽量做到每周有更新,方便跟我一样刚入门堆的人学习,第一篇教程研究了4天吧,途中没人指导. ...

最新文章

  1. 某学校学生在计算机等级水平测试中,提高中职学校计算机等级考试(一级)通过率的教学策略研究...
  2. python程序调试题_关于python程序调试问题,一个文件计算的问题
  3. java x.length_Java中的length和length()
  4. python题目训练(随时更新)
  5. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_12-MongoDb入门-基础概念...
  6. 黑客攻防实战入门读书笔记
  7. 论文阅读 (54):DeepFool: A Simple and Accurate Method to Fool Deep Neural Networks
  8. 百度地图定位到了非洲的问题
  9. linux notifier
  10. 微信小程序 MinUI 组件库系列之 label 标签组件
  11. uniapp 实现拨打电话
  12. Android 音乐APP(一)扫描本地音乐
  13. Google Earth Engine——飓风最佳轨迹数据库(HURDAT2)。大西洋盆地1851-2018年。
  14. 不错的google搜索地址
  15. DOM基本知识及DOM查询
  16. python powerbi知乎_利用Python调用Power BI REST API
  17. 输出100-200之间所有的素数(素数:只能被1和自己本身整除的数)
  18. 搭建属于自己的数字IC EDA环境(五):搭建FPGA自动化环境(Linux下vivado Tcl脚本自动化开发),业余IC设计流程与通路
  19. Linux离线安装Kafka(超级精简亲测安装)
  20. JVM 的“救世主”来了?---GraalVM 集成入门

热门文章

  1. V2ray状态,一直显示未运行(无论重启,开启)在查看状态还是未运行
  2. 我与CSDN的缘分——一年前的今天我甚至不知道什么叫大数据开发
  3. 三级网络技术_交换机及其配置(基础知识)
  4. 如何查看sap系统安装版本
  5. 设计模式 - 创建型模式_建造者模式
  6. Computer-Aided Civil and Infrastructure Engineering投稿经验
  7. pycharm修改界面主题颜色
  8. 公众号和小程序用户关联
  9. 【小项目】用Huffman树实现文件压缩并解压
  10. python 物理实验_基于Python和梯度下降算法的物理实验数据一元线性拟合方法