码迷,mamicode.com
首页 > Web开发 > 详细

Quartz.net misfire实践

时间:2015-06-17 15:07:47      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

?

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实践

标签:

原文地址:http://www.cnblogs.com/pengzhen/p/4583017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!