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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~