Quartz.Net—TriggerBuilder
TriggerBuilder
TriggerBuilder是一个建造者模式,链式建造。通过静态方法构建一个TriggerBuilder实例,然后再调用类方法Build()创建一个ITrigger的实现。
1、静态方法
public static TriggerBuilder Create()
{
return new TriggerBuilder();
}
TriggerBuilder链式构造开始方法。
2、触发的开始时间和结束时间。
DateTimeOffset时间偏移。 UTC是世界统一时间,会有一个当前时区的偏移,世界各地都有各自的偏移量,中国的是东八区。
TimeZoneInfo时区时间
public TriggerBuilder StartAt(DateTimeOffset startTimeUtc)
{
startTime = startTimeUtc;
return this;
}
public TriggerBuilder EndAt(DateTimeOffset? endTimeUtc)
{
endTime = endTimeUtc;
return this;
}
不设置这些时间,则一直执行。
3、制定Trigger和Job的关联关系。ForJob()
4、UsingJobData 附加信息
和JobBuilder中的一个作用。都是在具体执行的方法中可以拿到这个传进去的信息。
5、优先级 WithPriority
一个Job可以对应多个Trigger。当多个Trigger同一时间点出发,那么根据优先级判断。数字越大,优先级越高。
默认优先级是5
同一个任务有多个trigger。
触发先后顺序。
时间->优先级->字母排序
四大触发器
每一个解决一类问题。
1、WithSimpleSchedule
时分秒轮询,和timer一样。
一直循环,循环多少次,循环多久。(两个维度 时间(时分秒) 次数)
定时还钱,检查数据,更新状态等等。压缩redis等nosql进程内存。
withrepeatcount(n) 重复n+1次 但是底层又把n-1 所以最后还是n次
2、WithCalendarIntervalSchedule
只是扩展了SimpleScheduleBuilder,由于SimpleScheduleBuilder只是对时分秒轮询扩展,可以对年月日周轮询
3、WithDailyTimeIntervalSchedule
某一些时间段内执行多长时间一次。
每天8-10点 内 每半个小时执行一次
t => t.OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8,00)).EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(10,00)).WithIntervalInMinutes(30)
周一到周五 两点执行一次
t => t.OnMondayThroughFriday ().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 00)).EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(2, 10)).WithIntervalInHours(1)
执行多少次结束
EndingDailyAfterCount
一周的哪几天
OnDaysOfTheWeek(DayOfWeek.Friday,DayOfWeek.Monday)(周五 周一)
4、WithCronSchedule
最推荐的方法,是linux平台的时间格式。使用字符串符号表达时间。几乎现在任务组件都是使用的这种格式。
ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").WithCronSchedule("0/5 * 8-22 ? * 1-5").Build();
cron语法
4.1、表达式分为七个部分
秒 Seconds 0-59 , - * /
分 Minutes 0-59 , - * /
小时 Hours 0-23 , - * /
月内日期 Day-of-Month 1-31 , - * ? / L W C
月 Month 1-12 , - * /
周内日期 Day-of-Week 1-7 , - * ? / L C #
年(可选字段) Year (可选字段) 1970-2099 , - * /
4.2、特殊字符含义
*:表示整个时间
/:表示增量 例如在秒上,
1/5(从第一秒开始,每五秒执行一次) 1秒 6秒 11秒 ....
0/5(从第零秒开始,每五秒执行一次) 0秒 5秒 10秒 ....
/5(从第零秒开始,每五秒执行一次) 0秒 5秒 10秒 ....
*/5(从第零秒开始,每五秒执行一次) 0秒 5秒 10秒 ....
, : 指定某几个值,假如放在秒伤 1,2,3,4 分别在第 1 2 3 4秒上执行。
-: 指定范围。1-5 就是从 1到5
------------------------------------------------------------------------------------------------------------
?:用在月内日期和周内日期中, 表示用他们两个中的一个。
#:用在周内日期上,表示该月第几个星期几
L:last 最后一个。每个月最后一天,或者每周最后一天
W:week工作日。 15W 每月15号最近的那一个工作日
C:这个是啥我也不知道。网上也没有找到。
在线编辑器
http://cron.qqe2.com/
Quartz.Net—TriggerBuilder的更多相关文章
- Quartz.Net系列(六):Quartz五大构件Trigger之TriggerBuilder解析
所有方法图: 1.Create.Build Create:创建一个TriggerBuilder Build:生成Trigger var trigger = TriggerBuilder.Create( ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Quartz.net持久化与集群部署开发详解
序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我的罪过. 但是quart.net是经过许多大项 ...
- Quartz.net开源作业调度框架使用详解
前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...
- [Quartz笔记]玩转定时调度
简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...
- 关于Quartz.NET作业调度框架的一点小小的封装,实现伪AOP写LOG功能
Quartz.NET是一个非常强大的作业调度框架,适用于各种定时执行的业务处理等,类似于WINDOWS自带的任务计划程序,其中运用Cron表达式来实现各种定时触发条件是我认为最为惊喜的地方. Quar ...
- Quartz.net 开源job调度框架(二)----定点执行
在上一篇 Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...
随机推荐
- CTYZ的树论赛(P5557 旅行/P5558 心上秋/P5559 失昼城的守星使)
总结 由于受中秋节影响,没能在比赛时间内切掉\(T3\) 思维难度\(T1<T2<T3\),代码难度\(T1>T2>T3\) P5557 旅行 显然跳到环上去后就可以直接模了, ...
- Linux 搜索查找类指令
一.find 指令 find 指令将从指定目录向下递归遍历其各子目录,将满足条件的文件或者目录显示在终端. 基本语法 find [搜索范围] [选项] 选项说明 -name ...
- RabbitMQ入门学习系列(四) 发布订阅模式
发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...
- vue+elementui搭建后台管理界面(3侧边栏菜单)
上一节搭好了主框架,但是标签页和侧边栏只是分别展示了各自的菜单,如何将二者联动起来? 定义路由规则:当有 children 属性时,从 children 里取出 path 填充到侧边栏,如: { pa ...
- C格式字符串转为二叉树
最近在LeetCode做题,二叉树出现错误时不好排查,于是自己写了一个函数,将前序遍历格式字串转换成二叉树. 形如 "AB#D##C##" 的字符串,"#"表示 ...
- Perl寻路A*算法实现
A*算法:A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法.估价值与实际值越接近,估价函数取得就越好. 公式表示为: f(n)=g(n)+h(n),其中 f(n) 是从初始点经 ...
- html5的source元素
html5的source元素 一.总结 一句话总结: 主要是解决视频播放时候的浏览器的兼容问题 二.html5的source元素 学习要点 掌握source元素的用法 source元素-解决浏览器额兼 ...
- 范仁义web前端介绍课程---1、课程意义
范仁义web前端介绍课程---1.课程意义 一.总结 一句话总结: 提供的这一整套学习方法和资源,配合艾宾浩斯遗忘曲线等各种复习.学习算法和后续会有的娱乐化学习方式,能否真正做到让学过的东西不再忘记. ...
- ajax上传图片报错TypeError: 'append' called on an object that does not implement interface Fo
使用FormData时报错:TypeError: 'append' called on an object that does not implement interface FormData 解决办 ...
- 【mybatis源码学习】与spring整合Mapper接口执行原理
一.重要的接口 org.mybatis.spring.mapper.MapperFactoryBean MapperScannerConfigurer会向spring中注册该bean,一个mapper ...