Quartz任务调度(2)CronTrigger定制个性化调度方案

Cron表达式

1. 时间字段与基本格式

Cron表达式有6或7个空格分割的时间字段组成:

位置 时间域名 允许值 允许的特殊字符
1 0-59 ,-*/
2 分支 0-59 ,-*?/
3 小时 0-23 ,-*/
4 日期 1-31 ,-*/LWC
5 月份 1-12或 JAN-DEC ,-*/
6 星期 1-7 或 SUN-SAT ,-*?/LC#
7 年(可选) 1970-2099 ,-*/

在月份和星期中,我们也可以使用英文单词的缩写形式

2. 特殊字符

在Cron表达式的时间字段中,除允许设置数值外,还能你使用一些特殊的字符,提供列表、范围、通配符等功能

1. 星号(*)

可用在所有字段下,表示对应时间域名的每一个时刻,如*用在分钟字段,表示“每分钟”。

2. 问号(?)

只能用在日期和星期字段,代表无意义的值,比如使用L设定为当月的最后一天,则配置日期配置就没有意义了,可用?作占位符的作用。

3. 减号(-)

表示一个范围,如在日期字段5-10,表示从五号到10号,相当于使用逗号的5,6,7,8,9,10

4. 逗号(,)

表示一个并列有效值,比如在月份字段使用JAN,DEC表示1月和12月

5. 斜杠(/)

x/y表示一个等步长序列,x为起始值,y为增量步长值,如在小时使用1/3相当于1,4,7,10当时用*/y时,相当于0/y

6. L

L(Last)只能在日期和星期字段使用,但意思不同。在日期字段,表示当月最后一天,在星期字段,表示星期六(如果按星期天为一星期的第一天的概念,星期六就是最后一天。如果L在星期字段,且前面有一个整数值X,表示“这个月的最后一个星期X”,比如3L表示某个月的最后一个星期二

7. W

选择离给定日期最近的工作日(周一至周五)。例如你指定“15W”作为day of month字段的值,就意味着“每个月与15号最近的工作日”。所以,如果15号是周六,则触发器会在14号(周五)触发。如果15号是周日,则触发器会在16号(周一)触发。如果15号是周二,则触发器会在15号(周二)触发。但是,如果你指定“1W”作为day of month字段的值,且1号是周六,则触发器会在3号(周一)触发。quartz不会“跳出”月份的界限。

8. LW组合

在日期字段可以组合使用LW,表示当月最后一个工作日(周一至周五)

9. 井号(#)

只能在星期字段中使用指定每月第几个星期X。例如day of week字段的“6#3”,就意味着“每月第3个星期五”(day3=星期五,#3=第三个);“2#1”就意味着“每月第1个星期一”;“4#5”就意味着“每月第5个星期3。需要注意的是“#5”,如果在当月没有第5个星期三,则触发器不会触发。

10. C

只能在日期和星期字段中使用,表示计划所关联的诶其,如果日期没有被关联,相当于日历中的所有日期,如5C在日期字段相当于5号之后的第一天,1C在日期字段使用相当于星期填后的第一天

3. 一些实例

Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。如MON和mon是一样的

cron表达式 含义
0 0 12 * * ? 每天12点整触发一次
0 15 10 ? * * 每天10点15分触发一次
0 15 10 * * ? 每天10点15分触发一次
0 15 10 * * ? * 每天10点15分触发一次
0 15 10 * * ? 2005 2005年内每天10点15分触发一次
0 * 14 * * ? 每天的2点整至2点59分,每分钟触发一次
0 0/5 14 * * ? 每天的2点整至2点55分,每5分钟触发一次
0 0/5 14,18 * * ? 每天的2点整至2点55分以及18点整至18点55分,每5分钟触发一次
0 0-5 14 * * ? 每天的2点整至2点5分,每分钟触发一次
0 10,44 14 ? 3 WED 每年3月的每个星期三的2点10分以及2点44分触发一次
0 15 10 ? * MON-FRI 每月周一、周二、周三、周四、周五的10点15分触发一次
0 15 10 15 * ? 每月15的10点15分触发一次
0 15 10 L * ? 每月最后一天的10点15分触发一次
0 15 10 ? * 6L 每月最后一个周五的10点15分触发一次
0 15 10 ? * 6L 每月最后一个周五的10点15分触发一次
0 15 10 ? * 6L 2002-2005 2002年至2005年间,每月最后一个周五的10点15分触发一次
0 15 10 ? * 6#3 每月第三个周五的10点15触发一次
0 0 12 1/5 * ? 每月1号开始,每5天的12点整触发一次
0 11 11 11 11 ? 每年11月11日11点11分触发一次

使用示例

在quartz1.+版本中,我们通过如下方法创建CronTrigger

//定义调度触发规则,每天上午10:15执行
CronTrigger cornTrigger=new CronTrigger("cronTrigger","triggerGroup");
//执行规则表达式
cornTrigger.setCronExpression("0 15 10 * * ? *");

而在2.+版本中,则通过如下方式创建

//使用cornTrigger规则  每天10点42分
Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
    .withSchedule(CronScheduleBuilder.cronSchedule("0 42 10 * * ? *"))
    .startNow().build();

参考:http://blog.csdn.net/yuan8080/article/details/6583603

时间: 2024-11-02 06:22:22

Quartz任务调度(2)CronTrigger定制个性化调度方案的相关文章

Quartz任务调度(1)概念例析快速入门

Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的需求,在<spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能>,我们通过引介增强来简单地模拟实现了一个定时器.它可能只需要我们自己维护一条线程就足以实现定时监控.但在实际开发中,我们遇到的需求会复杂很多,可能涉及多点任务调度,需要我们多线程并发协作.线程池的维护.对运行时间规则进行更细粒度的规划.运行线程现场的保持与恢复等等.如果我们选择自己来造轮子,可能会遇到许多难题.这时候,引入

聊天主题:如何用C#定制个性化的界面控件

控件 聊天主题:如何用C#定制个性化的界面控件 主持人和专家介绍主持人:Guest_jswang_MS 微软专家: 韩定一(Guest_Danny_MS),赵彦(Guest_Francs_MS) Host Guest_jswang_MS says: 欢迎大家参加微软在线技术聊天. Host Guest_jswang_MS says: 本次聊天的主题是如何用C#定制个性化的界面控件 Host Guest_jswang_MS says: 首先,让我们欢迎来自微软全球技术中心工程师赵彦,韩定一 Hos

定制个性化按钮

定制个性化按钮   效果   说明 通过捕捉一个按钮不同状态的值来定制我们自己的按钮动画,本人仅仅提供了实现的抽象基类以及一个简单的示例,剩下的需要你根据自己的想象力创造了.   源码 https://github.com/YouXianMing/UI-Component-Collection // // BaseControl.h // BaseButton // // Created by YouXianMing on 15/8/27. // Copyright (c) 2015年 YouX

Quartz任务调度(4)JobListener分版本超详细解析

在<spring学习笔记(15)趣谈spring 事件:实现业务逻辑解耦,异步调用提升用户体验>我们通过实例分析讲解了spring的事件机制,或许你会觉得其中的配置略显繁琐,而在Quartz框架中,它为我们集成了强大的事件机制,轻松地帮助我们在任务调度中完成各类辅佐操作,高内聚而耦合. 相对spring的事件实现,quartz这边简化了许多,我们只需: 1. 自定义监听器接口实现类 2. 向scheduler中注册监听器实现类 只需以上两步即可我完成我们的事件监听.对于监听器实现类中,可能有些

Quartz任务调度(3)存储与持久化操作配置详细解析

内存存储RAMJobStore Quartz默认使用RAMJobStore,它的优点是速度.因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快.而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的.因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了. Quartz 的内存 Job 存储的能力是由一个叫做 org.quartz.simple.RAMJobStore 类提供.在我们

WF4.0实战(二十四) WF4定制个性化的WebService

概述: 用WF也可以处理网站的业务逻辑,有一个非常好的开源项目:Dropthings,它就是用WF去处理网站的业务逻辑的.这篇文章中,我也将 实现一个站点,这个站点使用WF4去处理复杂的业务逻辑. 首先说明一下这个程序的主要功能.日常生活中,我们会大量的使用webservice.比如查天气预报.查看火车时刻表.航班等等.这个 程序是把你自己常用的webservice放在一起,共你使用.在大家的网站中可能有一样的功能了,不过你们实现此类似的功能一般都是通过硬 编码去实现的.这篇文章中,我将通过WF

Spring整合的quartz任务调度的实现方式

一.在web.xml中将配置文件的位置指定好. Web.xml的配置如下: <?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="2.5"       xmlns="http://java.sun.com/xml/ns/javaee"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan

定制个性化的对话框窗口类

相信很多人在VC下开发程序的时候大多都会采用基于对话框的开发吧,我也不例外,大多数的小型测试程序没有必要开发基于文档/视图的结构来测试,只要使用一些基本的对话框程序就可以达到这个目的 . 但是在开发基于对话框的程序时,要使用到一些 Spy++ 的功能检测的时候,就会出现一些问题.什么问题呢?当我使用 Spy++ 去检测一个对话框的窗口类 时,并想得到一个对话框的窗口类,以便我在使用钩子的时候可以指定一个对话框进行 hook,但是结果出乎我意料之外 ,对话框的窗口类不是我在注册时所指定的对话框窗口

Quartz任务调度(6)schedulerListener分版本超详细解析

schedulerListener 在我们的监听器实现类中,这个类中需实现的方法很多,不需要的可以给出空实现,下面是一些常用的用法: 方法 说明 jobScheduled() Scheduler 在有新的 JobDetail 部署时调用此方法. jobUnscheduled() Scheduler 在有新的 JobDetail卸载时调用此方法 triggerFinalized() 当一个 Trigger 来到了再也不会触发的状态时调用这个方法.除非这个 Job 已设置成了持久性,否则它就会从 S