与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项。 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求。

1、常见触发器属性(Common Trigger Attributes)

除了所有触发器类型都具有用于跟踪其身份的TriggerKey属性之外,还有许多其他属性对所有触发器类型都是通用的。 在构建触发器定义时,使用TriggerBuilder设置这些常用属性(后面将举例说明)。

以下是所有触发器类型共有的属性列表:

            1)、JobKey 属性指示触发器触发时应该执行作业的标识。

            2)、StartTimeUtc 属性指示触发器的计划首次生效是什么时候。该值是DateTimeOffset对象,用于定义给定日历日期的时刻。对于某些触发器类型,触发器实际上会在开始时触发,对于其他触发器类型,它只是标记应该开始遵循调度的时间。这意味着您可以存储一个触发器,其中包含一个计划,例如1月份的“每月的第5天”,如果StartTimeUtc属性设置为4月1日,则会在第一次触发前几个月。

            3)、EndTimeUtc 属性指示触发器的调度计划何时不再有效。换句话说,具有“每月的第5天”和7月1日结束时间表的触发器将在6月5日的最后一次触发后将结束。

其他的属性需要更多时间来解释,将在以下小节中讨论。

2、优先级
    
        有时,当您有许多触发器(或Quartz.NET线程池中的工作线程比较少)时,Quartz.NET可能没有足够的资源来立即触发计划中该同时触发的所有触发器。 在这种情况下,您可能希望控制哪些触发器在可用的Quartz.NET工作线程中首先触发。为此,您可以在Trigger上设置priority属性。 如果同时触发N个触发器,但是当前只有Z个工作线程可用,则首先执行具有最高优先级的第一个Z触发器。如果未在触发器上设置优先级,则它将使用默认优先级5,优先级的值可以是任何整数值,包括正数或者负数。

注意:优先级仅在触发器具有相同的激活时间时才进行比较。定于10:59激活的触发器总是在定于11:00激活的触发器之前开火。

注意:当检测到触发器的作业需要恢复时,其恢复的调度优先级与原始触发器相同。

3、Misfire Instructions

触发器的另一个重要特性是它的“失火指令”。 如果持久性触发器由于调度程序被关闭而“错过”其触发时间,或者因为Quartz.NET的线程池中没有可用于执行作业的线程,则会发生失败。 不同的触发类型可以使用不同的失火指令。 默认情况下,它们使用“智能策略”指令 - 该指令具有基于触发类型和配置的动态行为。 当调度程序启动时,它会搜索任何已失效的持久触发器,然后根据各自配置的失火指令更新每个触发器。 当您在自己的项目中开始使用Quartz.NET时,您应该熟悉在给定触发器类型上定义的失火指令,并在其API文档中进行了解释。 有关失火指令的更多具体信息将在特定于每种触发类型的教程课程中给出。

4、Calendars

实现ICalendar接口的Quartz.NET Calendar对象可以在触发器存储在调度程序中时与触发器相关联。 日历可用于从触发器的触发计划中排除时间块。 例如,您可以创建一个触发器,在每个工作日上午9:30触发作业,但随后添加一个排除所有业务假期的日历。

Calendar可以是任何实现ICalendar接口的可序列化对象,如下所示:

  1. namespace Quartz
  2. {
  3. public interface ICalendar
  4. {
  5. string Description { get; set; }
  6.  
  7. ICalendar CalendarBase { set; get; }
  8.  
  9. bool IsTimeIncluded(DateTimeOffset timeUtc);
  10.  
  11. DateTime GetNextIncludedTimeUtc(DateTimeOffset timeUtc);
  12.  
  13. ICalendar Clone();
  14. }
  15. }

尽管日历对象可以“阻挡”只有一毫秒那么短的时间段,但很可能,你会对“封锁”整天的时间感兴趣。 为方便起见,Quartz.NET包含了类HolidayCalendar,它就是这样做的。

必须实例化日历对象,并通过AddCalendar(..)方法向调度程序注册日历对象。如果使用HolidayCalendar,则在实例化它之后,应该使用它的AddExcludedDate(DateTime日期)方法,可以将从调度中排除的天数做参数传递给该方法。同一个日历实例可以与多个触发器一起使用,例如:

  1. HolidayCalendar cal = new HolidayCalendar();
  2. cal.AddExcludedDate(someDate);
  3.  
  4. await sched.AddCalendar("myHolidays", cal, false);
  5.  
  6. ITrigger t = TriggerBuilder.Create()
  7. .WithIdentity("myTrigger")
  8. .ForJob("myJob")
  9. .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(, )) // execute job daily at 9:30
  10. .ModifiedByCalendar("myHolidays") // but not on holidays
  11. .Build();
  12.  
  13. // .. schedule job with trigger
  14.  
  15. ITrigger t2 = TriggerBuilder.Create()
  16. .WithIdentity("myTrigger2")
  17. .ForJob("myJob2")
  18. .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(, )) // execute job daily at 11:30
  19. .ModifiedByCalendar("myHolidays") // but not on holidays
  20. .Build();
  21.  
  22. // .. schedule job with trigger2

触发器的构造/构建的细节将在接下来的几篇文章中给出。 现在,只要相信上面的代码创建了两个触发器,每个触发器计划每天触发。 但是,将跳过在日历排除的期间内发生的任何发射。

有关可能满足您需求的许多ICalendar实现,请参阅Quartz.Impl.Calendar命名空间。

Quartz.Net进阶之二:关于触发器的更多信息的更多相关文章

  1. Quartz.Net进阶之一:初识Job作业和触发器

        前几天写了一篇有关Quartz.Net入门的文章,大家感觉不过瘾,想让我在写一些比较深入的文章.其实这个东西,我也是刚入门,我也想继续深入了解一下,所以就努力看了一些资料,然后自己再整理和翻译 ...

  2. 我的MYSQL学习心得(十二) 触发器

    我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...

  3. Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!

      分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...

  4. Wireshark入门与进阶系列(二)

    摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...

  5. SpringBoot进阶教程(二十九)整合Redis 发布订阅

    SUBSCRIBE, UNSUBSCRIBE 和 PUBLISH 实现了 发布/订阅消息范例,发送者 (publishers) 不用编程就可以向特定的接受者发送消息 (subscribers). Ra ...

  6. Mysql内置功能《二》触发器

    使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为,注意:没有查询 一 创建触发器 # 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INS ...

  7. Bing Maps进阶系列二:使用GeocodeService进行地理位置检索

    Bing Maps进阶系列二:使用GeocodeService进行地理位置检索 在<Bing Maps进阶系列一:初识Bing Maps地图服务>里已经对GeocodeService的功能 ...

  8. WPF 4 DataGrid 控件(进阶篇二)

    原文:WPF 4 DataGrid 控件(进阶篇二)      上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...

  9. Spring Boot进阶系列二

    上一篇文章,主要分析了怎么建立一个Restful web service,系列二主要创建一个H5静态页面使用ajax请求数据,功能主要有添加一本书,请求所有书并且按照Id降序排列,以及查看,删除一本书 ...

随机推荐

  1. Java Collection - 001 集合的遍历

    import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.java.domain ...

  2. 关于Mybatis的那点事

    1.实现关联表查询 1.1. 一对一关联 1). 提出需求 根据班级id查询班级信息(带老师的信息) 2). 创建表和数据 CREATE TABLE teacher( t_id INT PRIMARY ...

  3. redis学习链接收藏

    1.redis命令大全--官网 2.redis命令大全--中文翻译版 3.源码(注释版):redis3.0 4.程序代码:<redis入门指南(第二版)>第五章 5.最新的redis-st ...

  4. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操(网络拷贝)

    环境:CentOS 6.7  + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...

  5. 如何修改element.style内联样式;

    如何修改element.style内联样式: 我们在写前面 web页面样式的时候,会发现有些时候,我们怎么修改 style里面的值,页面上的样式都不会修改,当你用工具查看时,会发现里面会有 eleme ...

  6. Percona MySQL 5.7 Linux通用二进制包安装(CentOS 6)

    Linux 安装 Percona http://blog.itpub.net/26506993/viewspace-2136501/ https://www.cnblogs.com/snowwhite ...

  7. node和npm的安装和镜像源的修改

    在node官网下载https://nodejs.org/en/ 直接下载msi的文件,需要配置环境变量 我的电脑-->属性-->高级系统配置-->环境变量-->用户变量,在用户 ...

  8. IDEA导入Eclipse项目

    目录 一.导入项目 二.启动项目 一.导入项目 1.欢迎界面,选择Import Project 2.选择源码的位置,点击OK 3.选择Eclipse模型,点击Next 4.默认选择,点击Next 5. ...

  9. BOM (字节顺序标记)

    BOM(Byte Order Mark):字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码. 注:计算机内部数据存储都是二进制的,只有知道一段数据的二进制存储 ...

  10. input 选择框改变背景小技巧

    最近在项目中遇到一个问题,想要改变input选择框的背景,然而,令我没有想到的是,竟然无法直接改变背景的颜色 通常情况下:我们都可以通过改变元素的 background-color 的值来改变元素的背 ...