第五节: Quartz.Net五大构件之Trigger的四大触发类
一. 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的四大触发类的更多相关文章
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- 第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
一. 简介 1. 几个类型: ①:TriggerBuilder:用来创建ITrigger实例 ②:ITrigger:触发器实例 2.常用的几个方法 ①.StartNow:Trigger马上触发. ②. ...
- 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)
一. 五大构件 引言: Quartz.Net的五大构件 1. 调度器:Scheduler 2. 作业任务:Job 3. 触发器: Trigger 4. 线程池: SimpleThreadPoo ...
- 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...
- 第十五节:HttpContext五大核心对象的使用(Request、Response、Application、Server、Session)
一. 基本认识 1. 简介:HttpContext用于保持单个用户.单个请求的数据,并且数据只在该请求期间保持: 也可以用于保持需要在不同的HttpModules和HttpHandlers之间传递的值 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- android内部培训视频_第五节(1)_OA实战之登录界面
第五节(1):OA实战之登录界面 一.登录界面布局 1.背景图片 2.文本框 3.checkbox 4.按钮 暂未实现点击切换图片效果 <RelativeLayout xmlns:androi ...
- 基于Extjs的web表单设计器 第五节——数据库设计
这里列出表单设计器系列的内容,6.7.8节的内容应该在春节后才有时间出了.因为这周末就请假回老家了,准备我的结婚大事.在此提前祝大家春节快乐! 基于Extjs的web表单设计器 基于Extjs的web ...
- JAVA GC之标记 第五节
JAVA GC之标记 第五节 OK,我们继续昨天最后留下的问题,什么是标记?怎么标记? 第一个问题相信大家都知道,标记就是对一些已死的对象打上记号,方便垃圾收集器的清理. 至于怎么标记,一般有两种方 ...
随机推荐
- Chinese word segment based on character representation learning 论文笔记
论文名和编号 摘要/引言 相关背景和工作 论文方法/模型 实验(数据集)及 分析(一些具体数据) 未来工作/不足 是否有源码 问题 原因 解决思路 优势 基于表示学习的中文分词 编号:1001-908 ...
- SAP CRM Installed Bases(IBase)简介
SAP CRM使用Installed Base(以下简称IBase)来组织服务相关对象并进行管理.因为我在最近的工作中经常接触这个概念,所以学习了一点相关文档.下面是文档的翻译. 本文链接:https ...
- springcloud ribbon 客户端负载均衡用法
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
- chrome浏览器插件开发实例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 具体步骤: 1.新建 manifest.json 文件 { "name& ...
- poj 3090 Visible Lattice Points(离线打表)
这是好久之前做过的题,算是在考察欧拉函数的定义吧. 先把欧拉函数讲好:其实欧拉函数还是有很多解读的.emmm,最基础同时最重要的算是,¢(n)表示范围(1, n-1)中与n互质的数的个数 好了,我把规 ...
- Java项目的导入和导出
在很多情况下,需要将当前的 Java工程传递给其他人继续工作, 或协同工作,或者是从其他人那里接收到传递来的Java项目, 就需要掌握 Java项目的导入和导出. 以 Hello World 为例: ...
- hotspot目录结构
Hotspot的目录结构 ├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ...
- 基于 HTML5 的 3D 工业互联网展示方案
前言 通用电气(GE).IBM.英特尔等公司主推的“工业互联网”正在经历“产品-数据分析平台-应用-生态”的演进.这主要得益于 Predix 数据分析平台对工业互联网应用的整合能力.Predix 就像 ...
- Dictionary实现先进先出代替Queue
Queue删除其中一个元素比较麻烦,这是一个重码校验的类,主要处理是用Dictionary代替Queue了.目前使用下来还算稳定.代码贴出来给有缘人参考. /// <summary> // ...
- FAST MONTE CARLO ALGORITHMS FOR MATRICES II (快速的矩阵分解策略)
目录 问题 算法 LINEARTIMESVD 算法 CONSTANTTIMESVD 算法 理论 算法1的理论 算法2 的理论 代码 Drineas P, Kannan R, Mahoney M W, ...