以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍。所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中。这样,学习起来也不会很累,很容易看完,也能记得住,不用记得那么多不相关的东西,学习效率也会越高。好了,开始今天的学习计划吧,今天我们要介绍的对象就是 SimpleTrigger。

    一、SimpleTrigger 对象概述

如果您想要在特定时刻只执行一次作业,或者在特定时刻按特定时间间隔重复执行作业,则SimpleTrigger对象完全可以满足您的日程安排需求。或者用更简单的说,如果你想让触发器在2005年1月13日上午11:23:54开始激活,然后每隔10秒执行作业5次,这样的需求,就是 SimpleTrigger 最好的使用场景。

通过此描述,您可能对 SimpleTrigger 对象包含的以下这些属性并不会感到很惊讶,其属性包括:开始时间和结束时间、重复计数和重复间隔。所有这些属性都是您所期望的,只有几个与结束时间属性相关的需要特殊标注一下。

重复的次数可以是零,正整数或常量值SimpleTrigger.RepeatIndefinitely。 重复间隔属性必须是TimeSpan.Zero或正的TimeSpan值。 请注意,重复间隔为零将导致触发器的“重复计数”触发同时发生(或者与调度程序可以管理的同时接近)。

如果您还不熟悉DateTime类,那么根据要创建的startTimeUtc(或endTimeUtc),您可能会发现它对计算触发器触发时间很有帮助。

EndTimeUtc属性(如果已指定)覆盖重复次数属性。 如果您希望创建一个触发器,例如每隔10秒触发一次,直到给定的时刻 - 而不是必须计算它在开始时间和结束时间之间重复的次数,这可能很有用, 可以简单地指定结束时间,然后使用RepeatIndefinitely的重复计数(你甚至可以将重复次数设置为一个巨大数字,而且这个数字肯定会超过触发器在结束时间到来之前实际触发的次数)。

SimpleTrigger实例使用TriggerBuilder(针对触发器的主要属性)和WithSimpleSchedule扩展方法(针对SimpleTrigger特定属性)来构建。

 1、在特定时刻构建触发器,不重复:

1             // TriggerBuilder默认创建简单触发器,实际上返回ITrigger
2             ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
3                 .WithIdentity("trigger1", "group1")
4                 .StartAt(myStartTime) // some Date
5                 .ForJob("job1", "group1") //使用名称,组字符串识别作业
6                 .Build();

2、在特定时刻构建触发器,然后每十秒重复十次:

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger3", "group1")
3                 .StartAt(myTimeToStartFiring) // 如果没有给出开始时间(如果省略该行),则表示“现在”
4                 .WithSimpleSchedule(x => x
5                     .WithIntervalInSeconds(10)
6                     .WithRepeatCount(10)) // 请注意,10次重复将总共触发11次
7                 .ForJob(myJob) //使用JobDetail本身的句柄识别作业
8                 .Build();

3、构建一个触发器,将在未来五分钟内触发:

1             trigger = (ISimpleTrigger) TriggerBuilder.Create()
2                 .WithIdentity("trigger5", "group1")
3                 .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // 使用DateBuilder在将来创建日期
4                 .ForJob(myJobKey) // 用JobKey标识工作
5                 .Build();

4、构建一个现在将触发的触发器,然后每五分钟重复一次,直到22:00:

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger7", "group1")
3                 .WithSimpleSchedule(x => x
4                     .WithIntervalInMinutes(5)
5                     .RepeatForever())
6                 .EndAt(DateBuilder.DateOf(22, 0, 0))
7                 .Build();

5、构建一个触发器,在下一个小时的顶部触发,然后每2小时重复一次,永远:

 1             trigger = TriggerBuilder.Create()
 2                 .WithIdentity("trigger8") //因为没有指定组,所以“trigger8”将位于默认组中。
 3                 .StartAt(DateBuilder.EvenHourDate(null)) // 得到下一个偶数小时(分钟和秒零(“00:00”))
 4                 .WithSimpleSchedule(x => x
 5                     .WithIntervalInHours(2)
 6                     .RepeatForever())
 7                 // 请注意,在此示例中,如果将触发器与作业一起传递给调度程序,则不会调用“forJob(..)”
 8                 .Build();
 9
10             await scheduler.scheduleJob(trigger, job);

花一些时间查看TriggerBuilder定义的语言及其扩展方法WithSimpleSchedule中的所有可用方法,以便您熟悉可用的选项,这些选项可能未在上面的示例中演示过。

 二、SimpleTrigger 的 Misfire(激活失败) 介绍

SimpleTrigger有些指令可用于告知Quartz.NET发生激活失败时它应该做什么。(在本教程的“更多关于触发器”部分中介绍了激活失败(Misfire)的情况)。 这些指令在MisfirePolicy.SimpleTrigger上定义为常量(包括描述其行为的API文档)。 说明包括:

1、SimpleTrigger的Misfire(激活失败)指令常量

1)、MisfireInstruction.IgnoreMisfirePolicy

2)、MisfirePolicy.SimpleTrigger.FireNow

3)、MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount

4)、MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount

5)、MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount

6)、MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount

您应该从早期的课程中回忆一下,所有触发器都可以使用 MisfirePolicy.SmartPolicy 指令,并且此指令也是所有触发器类型的默认指令。

如果使用“智能策略”指令,SimpleTrigger 将根据给定SimpleTrigger实例的配置信息和状态在其各种 MISFIRE 指令之间动态选择。 SimpleTrigger.UpdateAfterMisfire()方法的文档的解释了此动态行为的具体的细节内容。

构建 SimpleTriggers 实例时,将 misfire 指令指定为 SimpleSchedule 的一部分(通过SimpleSchedulerBuilder):

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger7", "group1")
3                 .WithSimpleSchedule(x => x
4                     .WithIntervalInMinutes(5)
5                     .RepeatForever()
6                     .WithMisfireHandlingInstructionNextWithExistingCount())
7                 .Build();

三、总结

今天要写的内容完成了,但是并不代表 SimpleTrigger 的各个方面都介绍完了。其实还有很多内容没有说到,这就要靠大家自己的努力。有些人坑你还是很喜欢看原文,那我也把地址贴出来的。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/simpletriggers.html

不忘初心,继续努力。

转载于:https://www.cnblogs.com/PatrickLiu/p/10037830.html

Quartz.Net进阶之三:SimpleTrigger详述相关推荐

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

    Quartz.Net进阶之二:关于触发器的更多信息 原文:Quartz.Net进阶之二:关于触发器的更多信息 与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解 ...

  2. Quartz.Net进阶之四:CronTrigger 详述

    以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...

  3. Quartz教程五:SimpleTrigger

    本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣研究源码的同学,可以参考我对quartz-core ...

  4. 深入Quartz,优雅地管理你的定时任务

    深入Quartz,优雅地管理你的定时任务 1 初识Quartz 2 Quartz基础使用 2.1 基于时间间隔的定时任务 2.2 基于Cron表达式的定时任务 3 Quartz解读 3.1 Job 3 ...

  5. Java任务调度框架Quartz

    转自:http://blog.csdn.net/yuebinghaoyuan/article/details/9045471 介绍 Quartz is a full-featured, open so ...

  6. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

  7. Java任务调度框架Quartz教程实例

        介绍 Quartz is a full-featured, open source job scheduling service that can be integrated with, or ...

  8. java quartz实例_Java任务调度框架Quartz教程实例

    介绍 Quartz is a full-featured, open source job scheduling service that can be integrated with, or use ...

  9. Spring4定时器 cronTrigger和simpleTrigger实现方法

    spring4定时器 cronTrigger和simpleTrigger实现方法 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许 ...

  10. java crontriggerbean_使用cronTriggerBean子类,动态设置cronExpression(quartz +...

    Quartz的使用前准备: 1.引入必要的jar包: quartz_all_xxx.jar 或者quartz_xxx.jar slf4j_api_xx.jar quartz所需要的日志工具 quart ...

最新文章

  1. spring_bean三种装配方式
  2. 你的斗地主能拿多少炸?
  3. SQL语句小tips(持续更新)
  4. Adobe Reader阅读器打开时显示上次看到的页面
  5. python -使用del语句删除对象引用
  6. 微服务、容器、DevOps三者之间的演进关系,你清楚吗?
  7. 泛化,过拟合,欠拟合素材(part1)--python机器学习基础教程
  8. C语言和我的世界指令哪个难,我的世界难度有什么区别 难度选择指令介绍
  9. javascript实现数组深复制的方法
  10. Qt4_IconEditor窗口部件
  11. 如何使用GDAL进行AOI裁剪
  12. JSK-369 字符逆序【入门】
  13. Tensorflow训练mnist数据集源代码解析
  14. 怎么样学好c++_怎么样
  15. Dubbo视频教程《基于Dubbo的分布式系统架构视频教程》
  16. 转载.NET技术-.NET各大网站-编程技术网址
  17. 爬取王者荣耀皮肤图片
  18. 龙之谷2服务器维护,龙之谷2更新后进不去游戏解决方法
  19. 遇见未来 | 对话朱贤文,PostgreSQL是一匹即将发力的黑马
  20. 3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图

热门文章

  1. 硬核! BAT 究竟是怎么玩转中台的!
  2. 资深程序员是用五年时间攒够100万,老婆是关键
  3. 该来的终于来了:“第一起”基于 IPv6 的 DDoS 攻击
  4. 如何正确使用开源项目?
  5. 关于 exynos 4412 按键中断 异步通知
  6. python第二十二天,configparser模块 subprocess 模块,xlrd 模块(表格处理)
  7. C++变量/函数命名规范
  8. Redis学习-1 NoSQL
  9. 记第一次在程序中埋彩蛋
  10. 课后作业-阅读任务-阅读笔记3