1.问题描述

在使用Quartz.net定时运行作业时,存在一种情况:作业错过了某次执行,当作业恢复的时候应该怎么处理?如:job1在3:50的时候应该执行的,但此刻job1处于暂停状态,而到3:55的时候,job1 resume,那么错过的3:50该怎么处理?

 

对此,Quartz.net使用misfire机制,misfire可以翻译为"错过了触发"。

 

2.misfire机制

这里以CronTrigger为例,提供了两种可选的值,

DoNothing:不触发立即执行。等待下次Cron触发频率到达时刻开始按照Cron频率依次执行。即如果错过了某次执行,直接忽略。

FireOnceNow:以当前时间为触发频率立刻触发一次执行,然后按照Cron频率依次执行。

 

 

 

而原始的Quartz的还提供了更多的选项:

http://blog.csdn.net/sailorhdx/article/details/7656021

 

3.如何使用?

3.1 配置文件中

  1. <!--清除日志文件-->
  2. <job>
  3.   <name>RemoveLogFileEveryDay</name>
  4.   <group>InnerBusiness</group>
  5.   <description>每天清除两周以前的日志文件</description>
  6.   <job-type>NS.RemoveLogFileEveryDay, NS</job-type>
  7.   <durable>false</durable>
  8.   <recover>true</recover>
  9. </job>
  10. <trigger>
  11.   <cron>
  12.     <name>RemoveLogFileEveryDayTrigger</name>
  13.     <group>RemoveLogFileEveryDayTrigger</group>
  14.     <description>每天23:00点执行一次</description>
  15.     <job-name>RemoveLogFileEveryDay</job-name>
  16.     <job-group>InnerBusiness</job-group>
  17.     <misfire-instruction>DoNothing</misfire-instruction>
  18.     <cron-expression>0 0 23 * * ?</cron-expression>
  19.   </cron>
  20. </trigger>

 

如上:配置了DoNothing。

 

3.2 代码中

  1. ICronTrigger myCronTrigger = scheduler.GetTrigger(triggerKey) as ICronTrigger;
  2.                 myCronTrigger.GetTriggerBuilder().WithCronSchedule(cronExpresion, (zw) => { zw.WithMisfireHandlingInstructionDoNothing(); }).Build();

 

仍然配置了DoNothing

 

 

4.艰辛的过程:查找配置方法—— <misfire-instruction>DoNothing</misfire-instruction>

一开始,我就想搜一下,如何配置misfire-instruction的配置,但是怎么都找不到,网上有一堆关于quartz_jobs.xml的配置的例子,可是都没有misfire的配置,因为misfire模式使用的FireOnceNow。

 

于是去官网的API搜索配置,还是没有找到

 

然后看到了github,就下载了代码

 

找到这个文件XMLSchedulingDataProcessor.cs,继续找到QuartzXmlConfiguration20,

XmlSerializer xs = new
XmlSerializer(typeof (QuartzXmlConfiguration20));

 

终于知道是misfire-instruction,而且必须配置在cron-expression的前面,比较严格

 

继续找到枚举值,直接配置字符串而已~

Quartz.net misfire实践的更多相关文章

  1. Quartz的misfire特性

    Quartz的misfire特性 只有一个线程.多个job 第一个job产生misfire(executeTime>Interval) 且是repeatForever 那么只会运行第一个job, ...

  2. Quartz的misfire理解

    misfire用于Trigger触发时,线程池中没有可用的线程或者调度器关闭了,此时这个Trigger变为misfire.当下次调度器启动或者有可以线程时,会检查处于misfire状态的Trigger ...

  3. Quartz的misfire处理机制分析

    Quartz是一个特性丰富的开源的任务调度开发库,它可以很方便的集成到你的应用程序中.在Quartz中,当一个持久的触发器因为调度器被关闭或者线程池中没有可用的线程而错过了激活时间时,就会发生激活失败 ...

  4. Quartz.Net—MisFire

    什么是misfire misfire就是哑火,就是trigger没有得到正常的触发. 1.所有的threadpool都在工作,而且工作时间很长,导致trigger没有threadpool去执行. 2. ...

  5. 集群式Quartz定时任务框架实践

    在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz.无论使用哪种,都需要解决一个问题,那就是集群问题.一般情况下,定时任务能且仅能运行 ...

  6. Quartz任务调度:MisFire策略和源码分析

    Quartz是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...

  7. Quartz小记(一):Elastic-Job - 分布式定时任务框架

    Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分.该项目基于成熟的开源产品Quartz和Zooke ...

  8. Quartz教程五:SimpleTrigger

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

  9. Quartz.NET | 佳佳的博客

    原文:Quartz.NET | 佳佳的博客 Quartz.NET 是一个定时计划任务的框架,支持 .NET Core. 本文示例代码大部分来自于官方教程:Quartz.NET - Quartz.NET ...

随机推荐

  1. Antenna Placement(匈牙利算法 ,最少路径覆盖)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6991   Accepted: 3466 ...

  2. java web dao 层和dao 实现层有什么好处

    接口是为了屏蔽不同数据库的JDBC实现差异而出现的. 以常见的系统组织结构为例,管理系统里有一个部门department表用于存放部门信息,因为部门下面可能有子部门所以表中的字段要定义成类似树形结构的 ...

  3. [Effective JavaScript 笔记] 第6条:了解分号插入的局限

    分号可以省略 js可以在语句结束不强制加分号.(建议还是添加,不添加分号往往会出现不易发现的BUG) function Point(x,y){ this.x=x||0; this.y=y||0; } ...

  4. Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景

    Unity默认烘培场景以后每张烘培贴图的大小是1024.但是有可能你的场景比较简单,用1024会比较浪费.如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间.  有 ...

  5. ruby : Exception Notification

    https://github.com/smartinez87/exception_notification#sections Add the following line to your applic ...

  6. chm文件打开空白无内容的解决办法

    今天下载了个chm文件,但是打开空白,也没显示什么内容,经过一番研究之后终于可以正常显示了,下面把解决办法分享出来供大家参考下,谢谢.   工具/原料 windows7系统 chm文件 方法/步骤   ...

  7. HDU 1069&&HDU 1087 (DP 最长序列之和)

    H - Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format: ...

  8. SpringMVC请求处理流程

    从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发   Spring MVC工作流程图   图一   图二    Spring工作流程描述 ...

  9. 《C#高级编程》学习笔记------C#中的委托和事件(续)

    本文转载自张子阳 目录 为什么要使用事件而不是委托变量? 为什么委托定义的返回值通常都为void? 如何让事件只允许一个客户订阅?(事件访问器) 获得多个返回值与异常处理 委托中订阅者方法超时的处理 ...

  10. TexBox的属性

    允许多行输入