C#作业调度Quartz.NET学习笔记(count)

网友投稿 1468 2022-09-17

C#作业调度Quartz.NET学习笔记(count)

C#作业调度Quartz.NET学习笔记(count)

一、简单介绍

Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于WinForm和ASP.NET应用中。它灵活而不复杂,可以为执行一个作业而创建简单或复杂的作业调度。它有很多特征,如:数据库支持、集群、插件、支持cron-like表达式等等。

官网:http://quartz-scheduler-/

源码:https://github.com/quartznet/quartznet

示例:http://quartz-scheduler-/documentation/quartz-2.x/quick-start.html

二、概念解释

Scheduler:作业调度器。

IJob:作业接口,继承并实现Execute, 编写执行的具体作业逻辑。

JobBuilder:根据设置,生成一个详细作业信息(JobDetail)。

TriggerBuilder:根据规则,生产对应的Trigger。

三、示例程序

3.1、界面

新建一个WinForm程序Client,项目右键->属性->应用程序->输出类型,选择控制台应用程序。

3.2、引用

项目右键->管理 NuGet 程序包->Quartz.NET。

3.2、作业

新建一个类DataSyncJob并继承IJob,代表它是一个作业,同时实现Execute方法。

说明:

1)一般来说,作业需打上[DisallowConcurrentExecution]标签,以避免当次作业尚未完成时又被开始调度执行。

2)作业可以接收触发器传递过来的参数(Key-Value),上面作业接收的是"Hello"参数。

3.3、调度

说明:

1)Job及Trigger在WithIdentity时都会用到**Group,此处Group的作用是用于分类,相当于一个命名空间。

2)触发器有4种,分别是WithSimpleSchedule、WithDailyTimeIntervalSchedule、WithCalendarIntervalSchedule、WithCronSchedule,常用第1种及第4种。

3)WithCronSchedule触发器使用的是Cron表达式。

3.4、结果

四、Cron表达式

1)在线Cron表达式生成器:https://cron.qqe2.com/

2)官方英文介绍:https://quartz-scheduler-/documentation/quartz-3.x/tutorial/crontrigger.html

3)Cron表达式整体上还是比较容易理解的,只有一点需要注意"?"号的用法。"?"可以用在 Day of Month 和 Day of Week 中,比如:每月1号的每小时的第31分钟,正确的表达式是:* 31 * 1 * ?,而不能是:* 31 * 1 * *,因为这样代表的是每周的任意一天。

4)官方示例:

表达式

解释

0 0 12 * * ?

每天中午12点触发

0 15 10 ? * *

每天上午10:15触发

0 15 10 * * ?

每天上午10:15触发

0 15 10 * * ? *

每天上午10:15触发

0 15 10 * * ? 2005

2005年的每天上午10:15触发

0 * 14 * * ?

在每天下午2点到下午2:59期间的每1分钟触发

0 0/5 14 * * ?

在每天下午2点到下午2:55期间的每5分钟触发

0 0/5 14,18 * * ?

在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0-5 14 * * ?

在每天下午2点到下午2:05期间的每1分钟触发

0 10,44 14 ? 3 WED

每年三月的星期三的下午2:10和2:44触发

0 15 10 ? * MON-FRI

周一至周五的上午10:15触发

0 15 10 15 * ?

每月15日上午10:15触发

0 15 10 L * ?

每月最后一日的上午10:15触发

0 15 10 L-2 * ?

每个月的第二天到最后一天的上午10:15触发

0 15 10 ? * 6L

每月的最后一个星期五上午10:15触发

0 15 10 ? * 6L

每个月最后一个星期五上午10时15分触发

0 15 10 ? * 6L 2002-2005

2002年至2005年的每月的最后一个星期五上午10:15触发

0 15 10 ? * 6#3

每月的第三个星期五上午10:15触发

0 0 12 1/5 * ?

每月每隔5天下午12点(中午)触发, 从每月的第一天开始

0 11 11 11 11 ?

每11月11日上午11时11分触发

五、一行代码实现调度

新建一个TestJob:

新建一个调度封装类QuartzFactory:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:国内百兆独立服务器哪里的比较便宜镇江电信好吗
下一篇:Web 趋势榜:上周最有意思、又热门的 10 大 Web 项目 - 210723
相关文章

 发表评论

暂时没有评论,来抢沙发吧~