一. 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. Vim 宏

    宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...

  2. 初学Django项目可能会遇到的问题

    1. 出现莫名其妙的 app01 我项目中的app名字并不是app01,可是运行python manage.py makemigrations的时候总是提示app01不是已安装的app Applyin ...

  3. tomcat报异常Invalid character found in method name. HTTP method names must be tokens

    最近监控了一下测试环境的日志,突然出现如下一个异常 由Error parsing HTTP request header可以看出是由于解析请求头出错导致的,但是它属于DEBUG级别的异常,虽然不影响系 ...

  4. Python操作MySQL:pymysql模块

    连接MySQL有两个模块:mysqldb和pymysql,第一个在Python3.x上不能用,所以我们学pymysql import pymysql # 创建连接 conn = pymysql.con ...

  5. HBase2.0中的Benchmark工具 — PerformanceEvaluation

    简介 在项目开发过程中,我们经常需要一些benchmark工具来对系统进行压测,以获得系统的性能参数,极限吞吐等等指标. 而在HBase中,就自带了一个benchmark工具—PerformanceE ...

  6. [LeetCode] 15. 三数之和

    题目链接:https://leetcode-cn.com/problems/3sum/ 题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a ...

  7. JDK内置工具使用(jps、jstack、jmap、jstat)

    一.JPS 1.jps -lvm:用于查看当前机器上已装载的jvm 二.jstackjstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁) 1.jstack -l pid ...

  8. Linux内核入门到放弃-内核活动-《深入Linux内核架构》笔记

    中断 中断类型 同步中断和异常.这些由CPU自身产生,针对当前执行的程序 异步中断.这是经典的中断类型,由外部设备产生,可能发生在任意时间. 在退出中断中,内核会检查下列事项. 调度器是否应该选择一个 ...

  9. Dubbo-Zookeeper安装

    安装zookeeper: 1.拖入tar.gz包,解压 2.建立/usr/zookeeper路径,该路径创建logs文件夹和data文件夹 3.进入conf目录,复制一份zoo_sample.cfg为 ...

  10. STL中的set使用方法详细!!!!

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...