您的位置:首页 > 其它

Quartz.Net Cron Expression

2016-04-23 03:31 309 查看
正如标题所示,文章主要是围绕Quartz.Net作业调度框架话题展开的,内容出自博主学习官方Examples的学习心得与体会,文中难免会有错误之处,还请指出得以指教。

前面了解了一些基本触发器构造作业调度的基础例子,接下来本篇会学习到关于Cron表达式的触发器。

PS:ICronTrigger触发器所轮询的将是无限重复轮询。

一,还是先来看一下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Quartz.Examples
{
/// <summary>
/// Interface for examples.
/// </summary>
/// <author>Marko Lahma (.NET)</author>
public interface IExample
{
string Name
{
get;
}

void Run();
}
}


IExample

无论如何,同样的我们需要得到调度实例对象:

ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();


定义作业类:

IJobDetail job = JobBuilder.Create<SimpleJob>()
.WithIdentity("job1", "group1")
.Build();


使用Cron表达式创建Cron触发器:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0/30 * * * * ?")
.Build();


特别要记得的是开启调度:

DateTimeOffset ft = sched.ScheduleJob(job, trigger);
sched.Start();


看回去WithCronSchedule("0/30 * * * * ?"), 第一个参数针对是秒数(以空格分隔)
==> 0/30表示:最近一次可以整除30的点开始(30s,60s),比如你是在25s开启的,那么在第30s时候就会触发,并且每30秒一次,如果你是第35秒开启的,那么 在第60s时候会触发,并且也是30秒一次循环
==> 1/30表示:在0/30的基础上加多1秒触发,比如像上面的例子,触发的时间点是(31s,01s)以此类推,分子表示多加的秒数,分母表示循环周期
==>如果是一个整数,比如15,那么就是表示每到第15s这个点的时候触发,可以指定多个整数,比如0,30,那么0s(60s),30s这两个时机会触发。

二:WithCronSchedule分钟表示

将上面tirgger稍微改动一下:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger2", "group1")
.WithCronSchedule("15 0/1 * * * ?")
.Build();


WithCronSchedule("15 0/1 * * * ?") 指每1分钟的第15s时机触发

同理,相关用法请看上面解释。

三:WithCronSchedule时钟表示

将上面tirgger稍微改动一下:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger3", "group1")
.WithCronSchedule("0 0/2 8-17 * * ?")
.Build();


WithCronSchedule("0 0/2 8-17 * * ?") 小时的表示:

==>8-17这样的时间段来指定,每天的8-17时每刚满2分钟执行一次。

==>10pm这样指定具体的小时点数,这里指定下午10点,即下午10点的这个时机触发。如果要指定一个小时内,比如想在晚上11点到12点之前执行,那么小时位可以写为23-0(不能写24)

四:WithCronSchedule日表示

将上面tirgger稍微改动一下:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.WithCronSchedule("0,30 0/1 23-0 1,20 * ?")
.Build();


同理,指的就是本月的1号和20号。

五:WithCronSchedule月表示

将上面tirgger稍微改动一下:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger5", "group1")
.WithCronSchedule("0,30 0/1 23-0 1,20 1 ?")
.Build();


六:WithCronSchedule星期表示

将上面tirgger稍微改动一下:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger6", "group1")
.WithCronSchedule("0,30 * * ? * MON-FRI")
.Build();


同理,星期一到星期五触发。使用逗号就是分别指周几触发,比如周末触发就可以写为:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("trigger7", "group1")
.WithCronSchedule("0,30 * * ? * SAT,SUN")
.Build();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: