一. WithSimpleSchedule(ISimpleTrigger)

1. 用途:时、分、秒上的轮询(和timer类似),实际开发中,该场景占绝大多数.

2. 轮询的种类:永远轮询和限定次数轮询.

3. 参数中的几个函数:

A.执行间隔:

  ①.WithInterval(TimeSpan timeSpan):通用的间隔执行方法

  ②.WithIntervalInHours(int hours):以小时为间隔单位进行执行

  ③.WithIntervalInMinutes(int minutes):以分钟为间隔单位进行执行

  ④.WithIntervalInSeconds(int seconds):以秒为间隔单位进行执行

B.执行时间:

  ①.WithRepeatCount(int repeatCount):执行多少次以后结束

  ②.RepeatForever():永远执行

  ③.repeatMinutelyForever():一分钟执行一次(永远执行)

      repeatMinutelyForever(int minutes):每隔几分钟执行一次(永远执行)

   repeatMinutelyForTotalCount(int count, int minutes):每隔几分钟执行一次(执行次数为count)

  类似的还有秒、小时。

 代码分享:

  public static void SimpleTriggrShow()
{
//1. 创建Schedule
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
//2. 创建Job
var job1 = JobBuilder.Create<HelloJob>().Build();
//3. 创建Trigger
//1s执行一次,永远执行
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever())
.Build();
//2s执行一次,执行10次
//var trigger = TriggerBuilder.Create()
// .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).WithRepeatCount(10))
// .Build();
//注意这种用法:WithScheduler,表示1s执行一次,执行了5次
//var trigger = TriggerBuilder.Create()
// .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForTotalCount(5, 1))
// .Build();
//4. 开始调度
scheduler.ScheduleJob(job1, trigger);
scheduler.Start();
}

二. WithCalendarIntervalSchedule (ICalendarTrigger)

1.用途:与日历相关

2.参数中的几个函数:

  ①.WithInterval(TimeSpan timeSpan):通用的间隔执行方法

  ②.WithIntervalInHours(int hours):以小时为间隔单位进行执行

  ③.WithIntervalInMinutes(int minutes):以分钟为间隔单位进行执行

  ④.WithIntervalInSeconds(int seconds):以秒为间隔单位进行执行

  ⑤.WithIntervalInDays(int days):以天为间隔单位进行执行

  ⑥.WithIntervalInMonths(int months):以月为间隔单位进行执行

代码分享:

  public static void CalendarIntervalTriggerShow()
{
//1. 创建Schedule
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
//2. 创建Job
var job1 = JobBuilder.Create<HelloJob>().Build();
//3. 创建Trigger
//3s执行一次,60s后结束
var trigger = TriggerBuilder.Create()
.WithCalendarIntervalSchedule(x => x.WithIntervalInSeconds())
.EndAt(DateTimeOffset.Now.AddSeconds()) //60s后结束
.Build();
//4. 开始调度
scheduler.ScheduleJob(job1, trigger);
}

三. WithDailyTimeIntervalSchedule (IDailyTimeTrigger)

1. 用途:解决时间点的增、减、排除。

2. 核心函数:

  a. OnEveryDay:每天

  b. OnMondayThroughFriday:周一至周五,即工作日

  c. OnSaturdayAndSunday:周六至周天,即休息日

  d. OnDaysOfTheWeek:用数组的形式单独来指定一周中的哪几天

  e. StartingDailyAt:表示开始于几点 (区别于前面的StartAt)

  f. EndingDailyAt:表示结束于几点 (区别于前面的EndAt)

 代码分享:

  public static void DailyTimeIntervalTriggerShow()
{
//1. 创建Schedule
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
//2. 创建Job
var job1 = JobBuilder.Create<HelloJob>().Build();
//3. 创建Trigger
//每天8-20点,每半个小时执行一次(即8:00、8:30 。。。。 19:30、20:30)
var trigger1 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
x => x.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInMinutes())
.Build(); //每个工作日的凌晨2点执行1次 (这里的设计是2点开始,2:01结束,每个一小时执行一次,说白了总共执行了一次)
//或者直接WithIntervalInHours替换成WithRepeatCount
var trigger2 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
x => x.OnMondayThroughFriday()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInHours())
.Build(); //每个周的周一和周四的2点执行1次 (这里的设计是2点开始,2:01结束,每个一小时执行一次,说白了总共执行了一次)
//或者直接WithIntervalInHours替换成WithRepeatCount
var trigger3 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
x => x.OnDaysOfTheWeek(new DayOfWeek[] {
DayOfWeek.Monday, DayOfWeek.Thursday })
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInHours())
.Build();
//4. 开始调度
scheduler.ScheduleJob(job1, trigger1);
scheduler.Start();
}

四. WithCronSchedule (ICronTrigger)

1. 用途:使用cron表达式代替硬编码,可以替代以上三种Trigger (详见:www.cnblogs.com/knowledgesea/p/4705796.html)

2. 规则:

  a  整体规则排列如下,且日和周必须有一个位数是 ?

    * * * * * *

    秒 分 时 日 月 周

  b  ?: 代表示模糊的意思,必须存在,且只能在日或周中的一个存在

  c  *: 最小单位轮询,在分钟的字段域里,表示每分钟;在小时的字段域里,表示每小时

  d  /: 表示递增: 如0/5在秒的字段域里,表示第0、5、15、20.... 秒   可以省略0,即 /5

  e  -: 表示范围, 如1-10在秒字段域里,表示1s、2s、3s到10s都执行

  f  ,: 表示并且, 如1,10,20在秒字段域里,表示1s,10s,20s都执行

  g #: 只能存在周这一个域,表示第几周的星期几,如果超出范围,则忽略不记,如2#4,表示第四周的星期二

  h  L: 表示last的意思: 天: 10L 表示本月的倒数第十天执行, 5L 表示本月的最后一个周四执行(暂不研究)

3. 补充一下秒、分、时、日、月、周的字段域范围

  秒: 0-59

  分: 0-59

  时: 0-23

  日: 1-31

  月: 1-12 或 JAN-DEC

  周: 1-7 或 SUN-SAT

  年:选填,可以留空, 1970-2099

4. 补充几个事例帮助理解:

  实例1:0**1*? note:每月1号凌晨都会被执行。

  实例2:0**?** note:每分钟的00秒被执行。

  实例3:0 10 18 ? 3 WEB note:每年3月的每个星期三,下午6点10分都会被触发

  实例4:0 10 18 15 3 ? note:每年三月的第15天,下午6点10分都会被触发

  实例5:0 10 18 1-5 * ? note:每月的1号到5号(包含每月1号和5号,每月共计5天都会被触发),下午6点10分都会被触发

  实例6:0 10-15 * ? * * note:每小时的第10分钟到第15分钟(包含每小时的第10分钟和第15分钟,每小时共计5分钟都会被触发),都会被触发

  实例7:10,20 * * ? * * note:每分钟的第10秒与第20秒都会被触发

  实例8:0 10,20 * 1,2 * ? note:每月的第1天与第2天的,每小时的第10分钟与第20分钟被触发。

  实例9:5/20 * * ? * * note:每分钟的第5秒,第25秒,第45秒 都会被执行。

  实例10:0 * 2/2 ? * * note:每天的第2小时,第4小时,第6小时,第8小时 ... 第22小时的00分00秒都会被触发。

  实例11:* * * ? * 3#4 note:每月的第4个星期的周2,凌晨触发。

  实例12:* * * ? * 6#2 note:每月的第2个星期的周5,凌晨触发

代码分享:

   public static void CronTriggerShow()
{
//1. 创建Schedule
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start(); //2. 创建Job
var job1 = JobBuilder.Create<HelloJob>().Build(); //3. 创建Trigger //每天8-20点,每半个小时执行一次(即8:00、8:30 。。。。 19:30、20:30)
var trigger1 = TriggerBuilder.Create().WithCronSchedule("0 0/30 8-20 * * ?")
.Build();
//每个工作日的凌晨2点执行1次
var trigger2 = TriggerBuilder.Create().WithCronSchedule("0 0 2 ? * Mon-Fri")
.Build(); //每个周的周一和周四的2点执行1次
var trigger3 = TriggerBuilder.Create().WithCronSchedule("0 0 2 ? * Mon,Wes")
.Build(); //4. 开始调度
scheduler.ScheduleJob(job1, trigger2);
}

第五节: Quartz.Net五大构件之Trigger的四大触发类的更多相关文章

  1. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  2. 第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)

    一. 简介 1. 几个类型: ①:TriggerBuilder:用来创建ITrigger实例 ②:ITrigger:触发器实例 2.常用的几个方法 ①.StartNow:Trigger马上触发. ②. ...

  3. 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

    一. 五大构件 引言: Quartz.Net的五大构件 1.  调度器:Scheduler 2.  作业任务:Job 3.  触发器: Trigger 4.  线程池: SimpleThreadPoo ...

  4. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案

    一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...

  5. 第十五节:HttpContext五大核心对象的使用(Request、Response、Application、Server、Session)

    一. 基本认识 1. 简介:HttpContext用于保持单个用户.单个请求的数据,并且数据只在该请求期间保持: 也可以用于保持需要在不同的HttpModules和HttpHandlers之间传递的值 ...

  6. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  7. android内部培训视频_第五节(1)_OA实战之登录界面

    第五节(1):OA实战之登录界面  一.登录界面布局 1.背景图片 2.文本框 3.checkbox 4.按钮 暂未实现点击切换图片效果 <RelativeLayout xmlns:androi ...

  8. 基于Extjs的web表单设计器 第五节——数据库设计

    这里列出表单设计器系列的内容,6.7.8节的内容应该在春节后才有时间出了.因为这周末就请假回老家了,准备我的结婚大事.在此提前祝大家春节快乐! 基于Extjs的web表单设计器 基于Extjs的web ...

  9. JAVA GC之标记 第五节

    JAVA GC之标记  第五节 OK,我们继续昨天最后留下的问题,什么是标记?怎么标记? 第一个问题相信大家都知道,标记就是对一些已死的对象打上记号,方便垃圾收集器的清理. 至于怎么标记,一般有两种方 ...

随机推荐

  1. CSS---内外边距

    1.内外边距含义 内边距是div边框内的距离.背景色会覆盖内边距,内边距会使宽高变大. 外边距是div边框外的距离.背景色不会覆盖外边距 内外边距都会撑高父元素,外边距会提高div与div之间的距离 ...

  2. Vue-Router模式、钩子

    转:https://www.cnblogs.com/heioray/p/7193841.html 模式 vue-router中的模式选项主要在router实例化的时候进行定义的,如下 const ro ...

  3. (八)Index and Query a Document

    Let’s now put something into our customer index. We’ll index a simple customer document into the cus ...

  4. 烦神的斐波那契&&洛谷-1306-斐波那契公约数

    传送门 洛谷1306传送门 -------------------------------------------------------------------------------------- ...

  5. Codeforces Round 1153(div. 2)

    这场奇差.ABCD四题.179名. 但是E在现场有213个人做出. 描述一下我在35分钟做完D后的心路历程. 首先看到这道E,第一下想到的是把所有的横向和竖向的整列(行)求出相连的个数. 然后想如何能 ...

  6. Kafka 详解(三)------Producer生产者

    在第一篇博客我们了解到一个kafka系统,通常是生产者Producer 将消息发送到 Broker,然后消费者 Consumer 去 Broker 获取,那么本篇博客我们来介绍什么是生产者Produc ...

  7. git完全cli指南之详细思维导图整理分享

    一直以来都觉得 在开发过程中 能用命令行的还是用命令行 能用快捷键的就要快捷键 前期可能要点学习成本 但是熟练后带来的好处还是非常可观的 所以一直坚持使用命令行的方式来使用git 基本上每个操作都能心 ...

  8. The 16th Zhejiang provincial collegiate programming contest

    今天我挺有状态的,看过的题基本都给了正解(可能是昨晚cf div3打得跟屎一样,人品守恒,不好意思发题解了),自己也给队伍签了很多水题(不敢让队友写,怕出锅). 最后6题滚了,有点可惜.还差B和K没做 ...

  9. Java 200+ 面试题补充② Netty 模块

    让我们每天都能看到自己的进步.老王带你打造最全的 Java 面试清单,认真把一件事做到最好. 本文是前文<Java 最常见的 200+ 面试题>的第二个补充模块,第一模块为:<Jav ...

  10. 打开Player时出现时间格式的错误提示

    安装完Player后如果更改了Windows的系统时间和日期显示格式,再次打开Player后会出现时间日期格式错误的提醒,需要按照要求更改Windows系统设置,才能正常运行Player. 此错误提示 ...