Quartz.NET开源作业调度框架系列(二):CronTrigger-转
CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则,例如"每个星期天的晚上12:00"进行备份任务,SimpleTrigger就不能胜任,只能选择CronTriggers.利用CronTrigger, 你不但能实现在"每个星期天的晚上12:00"进行备份的任务,还可以执行 "在每个星期一/星期三/星期五的上午9:00到10:00期间每隔5 分钟"进行某个自动化任务.
1 Cron Expressions
Cron-Expressions 是用户配置实例化的CronTrigger. Cron-Expressions是一个6个或者7个字符的字符串表达式, 每一个字符都表示一个具体的含义并且有取值范围. 每个字符用空格进行分隔,其表达的意义为(从左到右):
一般来说Cron-Expressions 以6位居多,年一般省略.上图的中每个字符的描述为 字符的意义+取值范围(用[])+可用的特殊字符({}).例如 秒[0-59] { , - * /}就代表第一个字符是秒,取值范围是0-59,同时可用的特殊字符为 , - * / 例如"0 15 10 ? * 6L"代表的意义就是每月最后一个星期五的10:15. 下面介绍一下特殊字符的含义:
特殊字符 |
含义 |
* |
所有值(all values) |
? |
没有具体的值(no specific value) |
- |
范围 0-10 |
, |
附加值 1,2,5 |
L |
在不同的字符位置代表的意义不同,"L" 在月天数段代表每月最后一天;如果单独出现在星期段,代表7,就是星期最后一天周六(英文习惯用法). |
W |
给定日期最近的(周一到周五). 月天数段"15W",表示离每月第15天最近的工作日 |
# |
月份的第多少天,"6#3" 表示月份中第三个星期5(6 = 周五 and "#3" =在月份中第三个). |
2 常见的表达式
下面给出一些常见的Cron-Expressions示例:
表达式 |
含义 |
0 0 12 * * ? |
每天12pm启动 |
0 15 10 ? * * |
每天10:15am启动 |
0 15 10 * * ? |
每天10:15am启动 |
0 15 10 * * ? * |
每天10:15am启动 |
0 15 10 * * ? 2005 |
在 2005年每天10:15am启动 |
0 * 14 * * ? |
每天在 2pm到2:59pm之间的每分钟进行启动 |
0 0/5 14 * * ? |
每天在 2pm到2:55pm之间的每5分钟进行启动 |
0 0/5 14,18 * * ? |
每天在 2pm到2:55pm和6pm到6:55pm之间的每5分钟进行启动 |
0 0-5 14 * * ? |
每天在 2pm到2:05pm之间的每分钟进行启动 |
0 10,44 14 ? 3 WED |
每个三月份的星期三的2:10pm到 2:44pm进行启动 |
0 15 10 ? * MON-FRI |
每个星期一到星期五的10:15am进行启动 |
0 15 10 15 * ? |
每个月第15天的10:15am进行启动 |
0 15 10 L * ? |
每个月最后一天的10:15am进行启动 |
0 15 10 L-2 * ? |
每个月第二天到最后一天的10:15am进行启动 |
0 15 10 ? * 6L |
每月最后一个星期五的10:15am进行启动 |
0/1 * * * * ? |
每秒进行启动 |
0 15 10 ? * 6L 2002-2005 |
从2002年到2005年的每月最后一个星期五的10:15am进行启动 |
0 15 10 ? * 6#3 |
每月第三个星期五的10:15am进行启动 |
0 0 12 1/5 * ? |
从每月第一天开始,每隔5天的12pm进行启动 |
0 11 11 11 11 ? |
每年11月11日的11:11am进行启动 |
3 CronTrigger示例
由上面的常见表达式我们知道表达式 "0/1 * * * * ?"代表了每秒执行 , 其CronTrigger定义如下:
1 ITrigger trigger = TriggerBuilder.Create() 2 .WithIdentity("cronTrigger1", "SimpleGroup") 3 .WithCronSchedule("0/1 * * * * ?", x => x 4 .WithMisfireHandlingInstructionFireAndProceed()) 5 .ForJob("HelloJob", "SimpleGroup") 6 .Build();
也可以用下面的方法进行定义(注意默认时间不是系统时间-北京时间,所以如果打印出Job第一次打印的时间不是正确的时间,但是好像不影响使用):
1 //定义job2 IJobDetail job3 = JobBuilder.Create<ColorJob>()3 .WithIdentity("job3", "group1")4 .Build();5 //定义cronTrigger6 ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create()7 .WithIdentity("cronTrigger", "group1")8 .WithCronSchedule("0/20 * * * * ?", x => x9 .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("China Standard Time")))//无效 ? 10 .Build(); 11 //默认开始时间 12 DateTimeOffset scheduleTime3 = sched.ScheduleJob(job3, cronTrigger); 13 //转换到本地时间(北京时间) 14 DateTimeOffset dt= scheduleTime3.ToLocalTime();// 15 //北京时间为默认时间+8小时 16 DateTimeOffset scheduleTimeChina = scheduleTime3.AddHours(8); 17 //返回Cron Expression 18 string cronExpression = cronTrigger.CronExpressionString;
如果在定义的时间规则下,我想排除一些日期,那么如何实现呢?用ModifiedByCalendar即可实现:
1 //排除的日期2 HolidayCalendar cal = new HolidayCalendar();3 DateTime dt排除 = new DateTime(2015, 12, 1);4 cal.AddExcludedDate(dt排除);5 6 sched.AddCalendar("myHolidayCalendar", cal, false, true);7 //定义job8 IJobDetail job3 = JobBuilder.Create<ColorJob>()9 .WithIdentity("job3", "group1") 10 .Build(); 11 //定义cronTrigger 12 ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create() 13 .WithIdentity("cronTrigger", "group1") 14 .WithCronSchedule("0/20 * * * * ?", x => x 15 .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("China Standard Time")))//无效 ? 16 .ModifiedByCalendar("myHolidayCalendar") 17 .Build(); 18 //默认开始时间 19 DateTimeOffset scheduleTime3 = sched.ScheduleJob(job3, cronTrigger); 20 //转换到本地时间(北京时间) 21 // 2015-12-02 00:00:00 +08:00 不包含 2015-12-01 22 DateTimeOffset dt = scheduleTime3.ToLocalTime(); 23 //北京时间为默认时间+8小时 24 DateTimeOffset scheduleTimeChina = scheduleTime3.AddHours(8); 25 //返回Cron Expression 26 string cronExpression = cronTrigger.CronExpressionString;
出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载于:https://www.cnblogs.com/micro-chen/p/7942010.html
Quartz.NET开源作业调度框架系列(二):CronTrigger-转相关推荐
- .NET开源作业调度框架Quartz
.NET开源作业调度框架Quartz 一 Quartz简介 Quartz是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个简单或复杂的作业调度任务. 是对非常流行的JAVA开源调度框架 Qu ...
- .Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- 热门框架系列 (二) -- SpringMvc的父子容器,SpringBoot是否有父子容器?
@TOC# 热门框架系列 记录在程序走的每一步___auth:huf 从新的篇章开始;篇章阅读需要先关注; 因为笔者想参与技术文章的评选.;需要一定的粉丝量; 粉丝量达到一定数量.所有文章阅读限制将会 ...
- 开发一款开源爬虫框架系列(五):爬虫架构的一些新思路
爬虫开源项目地址:http://git.oschina.net/coliza/MongooCrawler 以前的思路是由客户端完成所有的下载网页,解析等功能,服务器端负责从内存队列中拿到数据并将获取的 ...
- Quartz.NET实现作业调度
一.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp ...
- 作业调度框架_Quartz
什么是Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发 ...
- quartz cron 每周一_quartz框架和关闭超时订单
Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运 ...
- Quartz.net 开源job调度框架(二)----定点执行
在上一篇 Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...
- Quartz作业调度框架
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...
最新文章
- 怎样构建中文文本标注工具?(附工具、代码、论文等资源)
- 【深度学习笔记】零基础入门深度学习必备知识
- python基础笔记_python基础学习笔记
- crf模型 java_定制你自己的CRF模型
- PHP CodeBase: 求最近一个周一和上周一的日期
- 基于 jmeter 的分布式性能测试实战
- WEB-INF文件夹的位置和作用
- Atitit USRqc62204 证书管理器标准化规范
- [C#][Quartz]帮助类
- MathType7新版本数学公式编辑器上线功能特性
- 娃哈哈的新品,为什么打动不了年轻人?
- WinRM 如何设置 TrustedHosts
- $('xx')[0].files[0]的意思
- cesium加载OSM在线地图
- sql入门(3)------SQLServer3
- python输出换行
- GBase 8s 特性简介
- sinx的不定积分易错点
- 用shell脚本实时查看网卡流量
- 二冲港交所,嘀嗒出行“顺风车领头羊”的故事真的动听吗?
热门文章
- c++ lamda表达式调用自身实现定时器
- 学java的就业方向_学习Java的就业前景怎么样
- class括号里的object_JVM真香系列:轻松理解class文件到虚拟机(上)
- 深入理解 gRPC 协议--理解protobuf/.proto/http2
- (34)FPGA分频设计-奇数分频(第7天)
- (25)FPGA面试题5分频器
- ajax原生为什么else会执行2次,关于Ajax,明明传过去的值是1,可不知道为什么就是else起作用?...
- mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制
- su生成面域插件_插件玩的溜,SU不用愁
- RTT Nano+STM32F407ZGT6+LAN8720A+LWIP+CubeMX+MDK