一. 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)

  类似的还有秒、小时。

 代码分享:

 1  public static void SimpleTriggrShow()2         {3             //1. 创建Schedule4             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();      5             //2. 创建Job6             var job1 = JobBuilder.Create<HelloJob>().Build();7             //3. 创建Trigger8             //1s执行一次,永远执行9             var trigger = TriggerBuilder.Create()
10                                         .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever())
11                                         .Build();
12             //2s执行一次,执行10次
13             //var trigger = TriggerBuilder.Create()
14             //                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).WithRepeatCount(10))
15             //                            .Build();
16             //注意这种用法:WithScheduler,表示1s执行一次,执行了5次
17             //var trigger = TriggerBuilder.Create()
18             //                            .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForTotalCount(5, 1))
19             //                            .Build();
20             //4. 开始调度
21             scheduler.ScheduleJob(job1, trigger);
22             scheduler.Start();
23         }

二. WithCalendarIntervalSchedule (ICalendarTrigger)

1.用途:与日历相关

2.参数中的几个函数:

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

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

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

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

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

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

代码分享:

 1  public static void CalendarIntervalTriggerShow()2         {3             //1. 创建Schedule4             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();5             scheduler.Start();6             //2. 创建Job7             var job1 = JobBuilder.Create<HelloJob>().Build();8             //3. 创建Trigger9             //3s执行一次,60s后结束
10             var trigger = TriggerBuilder.Create()
11                                         .WithCalendarIntervalSchedule(x => x.WithIntervalInSeconds(3))
12                                         .EndAt(DateTimeOffset.Now.AddSeconds(60))    //60s后结束
13                                         .Build();
14             //4. 开始调度
15             scheduler.ScheduleJob(job1, trigger);
16         }

三. WithDailyTimeIntervalSchedule (IDailyTimeTrigger)

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

2. 核心函数:

  a. OnEveryDay:每天

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

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

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

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

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

 代码分享:

 1  public static void DailyTimeIntervalTriggerShow()2         {3             //1. 创建Schedule4             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();5             //2. 创建Job6             var job1 = JobBuilder.Create<HelloJob>().Build();7             //3. 创建Trigger8             //每天8-20点,每半个小时执行一次(即8:00、8:30  。。。。   19:30、20:30)9             var trigger1 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
10                                                    x => x.OnEveryDay()
11                                                        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
12                                                        .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(20, 00))
13                                                        .WithIntervalInMinutes(30))
14                                                        .Build();
15
16             //每个工作日的凌晨2点执行1次 (这里的设计是2点开始,2:01结束,每个一小时执行一次,说白了总共执行了一次)
17             //或者直接WithIntervalInHours替换成WithRepeatCount
18             var trigger2 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
19                                                    x => x.OnMondayThroughFriday()
20                                                          .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 00))
21                                                          .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 01))
22                                                          .WithIntervalInHours(1))
23                                                          .Build();
24
25             //每个周的周一和周四的2点执行1次  (这里的设计是2点开始,2:01结束,每个一小时执行一次,说白了总共执行了一次)
26             //或者直接WithIntervalInHours替换成WithRepeatCount
27             var trigger3 = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
28                                                  x => x.OnDaysOfTheWeek(new DayOfWeek[2] {
29                                                                         DayOfWeek.Monday, DayOfWeek.Thursday })
30                                                        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 00))
31                                                        .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 01))
32                                                        .WithIntervalInHours(1))
33                                                        .Build();
34             //4. 开始调度
35             scheduler.ScheduleJob(job1, trigger1);
36             scheduler.Start();
37         }

四. 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,凌晨触发

代码分享:

 1   public static void CronTriggerShow()2         {3             //1. 创建Schedule4             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();5             scheduler.Start();6 7             //2. 创建Job8             var job1 = JobBuilder.Create<HelloJob>().Build();9
10             //3. 创建Trigger
11
12             //每天8-20点,每半个小时执行一次(即8:00、8:30  。。。。   19:30、20:30)
13             var trigger1 = TriggerBuilder.Create().WithCronSchedule("0 0/30 8-20 * * ?")
14                                                   .Build();
15             //每个工作日的凌晨2点执行1次
16             var trigger2 = TriggerBuilder.Create().WithCronSchedule("0 0 2 ? * Mon-Fri")
17                                                   .Build();
18
19             //每个周的周一和周四的2点执行1次
20             var trigger3 = TriggerBuilder.Create().WithCronSchedule("0 0 2 ? * Mon,Wes")
21                                                   .Build();
22
23
24             //4. 开始调度
25             scheduler.ScheduleJob(job1, trigger2);
26         }

第五节: Quartz.Net五大构件之Trigger的四大触发类相关推荐

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

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

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

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

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

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

  4. 第五节 面向对象相关特性

    第五节  面向对象相关特性 1.命名空间 namespace xueyuan; 2.创建类 class Hello {public function sayHello(){echo "hel ...

  5. 第五节 RabbitMQ在C#端的应用-消息收发

    原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...

  6. 【java】兴唐课程第五节到第九节知识点总结

    第九节 1. 代码:void readBook(String- bookNames) 表示不确定参数的个数,此时变量为一个数组. 2.当方法中的参数名称(如stuname)和属性名称相同时. this ...

  7. Simulink仿真 第五节 复用器和分路器

    第五节 复用器和分路器 1.复用器(将多个输入信号合并为矢量) Mux 模块可将其输入合并为单个矢量输出.输入可以是标量或矢量信号.所有输入都必须具有相同的数据类型和数值类型.矢量输出信号元素采用输入 ...

  8. Python编程基础:第五十五节 map函数Map

    第五十五节 map函数Map 前言 实践 前言 map函数的作用是将指定函数作用于一个可迭代对象内部的每一个元素,其表达方式为map(function, iterable),第一个位置指定作用函数,第 ...

  9. Python编程基础:第四十五节 方法链Method Chaining

    第四十五节 方法链Method Chaining 前言 实践 前言 方法链是指一个对象一次调用其自身的多个方法,通常写作对象.方法1.方法2.由于这种调用方法看起来像一个链条,所以我们将其称作方法链. ...

最新文章

  1. phpstudy易犯的错误
  2. 使用WatchService监控文件变化
  3. redis的关键路径和lazy-free
  4. OSPF 多进程实验(1)
  5. android活动开始,android – 点击谷歌地图标记infoWindow开始活动
  6. 自适应图片大小的弹出窗口(3 中方法)
  7. 《人月神话》阅读笔记3
  8. 混合高斯模型_大数据小白入门高斯混合模型(GMM)聚类算法
  9. 快速从小白到大牛的Python学习路线
  10. 【NLP】浅谈 Transformer-based 模型中的位置表示
  11. kill、killall 、pkill 发送信号命令
  12. node,js的基础认识(一)
  13. NOVELL NetWare 下的数据恢复
  14. 机器学习神器Scikit-Learn保姆级入门教程
  15. iframe中加载html,在iframe中加载外部html并访问内容
  16. 对于运维以及运维开发工程师的一些了解
  17. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
  18. Java implements关键字
  19. 重磅!全球Top 1000计算机科学家公布:张宏江居大陆科学家之首
  20. ZW32-12型户外柱上高压真空断路器

热门文章

  1. vmware创建虚拟机并安装centos7系统
  2. 每日一题20180330-Linux
  3. Unknown storage engine 'InnoDB'
  4. LoadRunner函数
  5. 第九周 10.25-10.31
  6. 关于非root用户配置ssh运行环境
  7. [Leetcode][第81题][JAVA][N皇后问题][回溯算法]
  8. python ssh脚本_ssh爆破(python脚本)
  9. qstring去掉特定字符_如何花式、批量且操作简单地处理字符?
  10. mysql数据库持续_MySql数据库--持续记录ing