Quartz.NET一个开源的作业调度框架
quartz.net是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。
quartz.net允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。
整合了 quartz.net的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
官网:http://www.quartz-scheduler.net/
下面结合我的项目中的使用给大家分享:
包括以下技术点:单一实例模式、nlog使用方法、模板类、抽象类、抽象方法、接口、cron表达式
首先,我们先起一个模板类jobservice,定义抽象的操作,实现类自己通过重写gettrigger()去定义触发的时间。
接下来,我们来看看一个实现类expiredsessionsjobservice,它定义了每60秒就触发一次,当然这个时间定义,我们还可以用cron表达式,可以用这类写法:
icrontrigger crontrigger = new quartz.impl.triggers.crontriggerimpl(jobname, groupname, "0/60 * * * * ?");
cron表达式
quartz中的cron表达式和linux下的很类似,比如 "/5 * * ? * * *" 这样的7位表达式,最后一位年非必选。
表达式从左到右,依此是秒、分、时、月第几天、月、周几、年。下面表格是要遵守的规范:
实例介绍
”0 0 10,14,16 * * ?" 每天10点,14点,16点 触发。
"0 0/5 14,18 * * ?" 每天14点或18点中,每5分钟触发 。
字段名 | 允许的值 | 允许的特殊字符 |
---|---|---|
seconds | 0-59 | , - * / |
minutes | 0-59 | , - * / |
hours | 0-23 | , - * / |
day of month | 1-31 | , - * ? / l w |
month | 1-12 or jan-dec | , - * / |
day of week | 1-7 or sun-sat | , - * ? / l # |
year | 空, 1970-2099 | , - * / |
特殊字符 | 解释 |
, | 或的意思。例:分钟位 5,10 即第5分钟或10分都触发。 |
/ | a/b。 a:代表起始时间,b频率时间。 例; 分钟位 3/5, 从第三分钟开始,每5分钟执行一次。 |
* | 频率。 即每一次波动。 例;分钟位 * 即表示每分钟 |
- | 区间。 例: 分钟位 5-10 即5到10分期间。 |
? | 任意值 。 即每一次波动。只能用在dayofmonth和dayofweek,二者冲突。指定一个另一个一个要用? |
l | 表示最后。 只能用在dayofmonth和dayofweek,4l即最后一个星期三 |
w | 工作日。 表示最后。 只能用在dayofweek |
# | 4#2。 只能用dayofmonth。 某月的第二个星期三 |
具体的业务处理类是expiredsessionsjob,它必须实现ijob,execute方法为具体业务方法,实现作业的内容;
我们还可以新建一个asp.net website,并引入crystalquartz.remote包,生成后台可监控的管理平台。
上一篇: Photoshop 绘制矢量风格地球
下一篇: 24节气谚语
推荐阅读
-
分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
-
详解免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
-
时隔一年,你关注的打造一个实用的TXT文本操作及日志框架,我们开源了,不再为程序写日志发愁(也支持.net core哦)
-
.NET Core下开源任务调度框架Hangfire的Api任务拓展(支持秒级任务)
-
Python使用multiprocessing实现一个最简单的分布式作业调度系统
-
分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)
-
详解免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
-
java云原生之Quarkus(一个Red Hat开源的Java框架)
-
大数据与批量调度的紧密关系 etl作业调度企业开发开源软件数据仓储自动化运维
-
Python使用multiprocessing实现一个最简单的分布式作业调度系统