博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz.net misfire实践
阅读量:6939 次
发布时间:2019-06-27

本文共 2436 字,大约阅读时间需要 8 分钟。

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的还提供了更多的选项:

 

1 
2
3
Simple Trigger Misfire Instructions
4
5
6
7
8
9
10
11
12
13
14
15 16
17
18
Cron Trigger Misfire Instructions
19
20
21
22
23
24
25
26
27 28
29
30
Date Interval Trigger Misfire Instructions
31
32
33
34
35
36
37
38

 

 

3.如何使用?

 

 

3.1 配置文件中

 

1 
2
3
RemoveLogFileEveryDay
4
InnerBusiness
5
每天清除两周以前的日志文件
6
NS.RemoveLogFileEveryDay, NS
7
false
8
true
9
10
11
12
RemoveLogFileEveryDayTrigger
13
RemoveLogFileEveryDayTrigger
14
每天23:00点执行一次
15
RemoveLogFileEveryDay
16
InnerBusiness
17
DoNothing
18
0 0 23 * *
19
20

 

如上:配置了DoNothing。

3.2 代码中

ICronTrigger myCronTrigger = scheduler.GetTrigger(triggerKey) as ICronTrigger;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的前面,比较严格

技术分享

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

转载地址:http://qwmjl.baihongyu.com/

你可能感兴趣的文章
ScrollUp – 超轻量的可定制的回到顶部 jQuery 插件
查看>>
SSH 网站制作之文件上传
查看>>
基于 Spring Security 的开源统一角色访问控制系统 URACS
查看>>
C#调用C++的库 P/Invoke工具集
查看>>
Android学习笔记42:XML文件解析(DOM方式)
查看>>
每周一道数据结构(二)排序总结
查看>>
PostgreSQL在何处处理 sql查询之三十一
查看>>
poj 3417 Network
查看>>
2013年6月5日星期三
查看>>
虚拟机安装fedora18黑屏
查看>>
PORT-ISOLATE 端口隔离
查看>>
ExtJs特点、优缺点及注意事项
查看>>
【转】程序员:伤不起的三十岁
查看>>
待解决算法
查看>>
关于C++成员函数指针的使用
查看>>
《第五章 操作符和表达式》
查看>>
一个非常有趣的算法程序(有趣只针对程序猿)就是Josephus问题
查看>>
收集的几个串口软件
查看>>
TC SRM 584 DIV2
查看>>
c#线程--生产者和消费者
查看>>