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

简介: <div class="markdown_views"><h1 id="cron表达式">Cron表达式</h1><h2 id="1-时间字段与基本格式">1. 时间字段与基本格式</h2><p>Cron表达式有6或7个空格分割的时间字段组成:</p><table><thead><tr><th>位置</th> <th>时间域名</th> <th>允

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

目录
相关文章
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
弹性计算 监控 数据安全/隐私保护
阿里云ECS云监控界面
阿里云ECS云监控界面
1321 2
|
安全 数据安全/隐私保护 C++
C++一分钟之-成员访问控制:public, private, protected
【6月更文挑战第20天】C++的成员访问控制涉及`public`、`private`和`protected`,影响类成员的可见性和可访问性。`public`成员对外公开,用于接口;`private`成员仅限类内部,保护数据安全;`protected`成员在派生类中可访问。常见问题包括不恰当的访问级别选择、继承中的访问权限误解及过度使用友元。通过示例展示了如何在派生类中访问`protected`成员。正确使用访问修饰符能确保代码的封装性、安全性和可维护性。
654 4
|
JavaScript 前端开发
vue2升级到vue3的一些使用注意事项记录(四)
vue2升级到vue3的一些使用注意事项记录(四)
293 0
|
存储 监控 中间件
Linux双机热备解决方案之Heartbeat
Linux双机热备解决方案之Heartbeat
|
机器学习/深度学习 供应链 算法
SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘
SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘
|
JavaScript C# Windows
【傻瓜级JS-DLL-WINCC-PLC交互】5.​用西门子TIA Portal 博途配置PLC(SIMATIC S7-1200CPU 1215C AC/DC/RLY)
【傻瓜级JS-DLL-WINCC-PLC交互】5.​用西门子TIA Portal 博途配置PLC(SIMATIC S7-1200CPU 1215C AC/DC/RLY)
416 0
|
Dart 开发者
【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法
【Flutter】Dart 面向对象 ( get 方法 | set 方法 | 静态方法
1133 0
|
机器学习/深度学习 算法 搜索推荐
手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
1098 0
|
消息中间件 资源调度 算法
任务调度:时间轮算法经典案例解析及应用实现
平时大家的工作中应该会遇到较多需要在某个时间点执行某个任务,比如对运维来说,定时数据库的备份,日志和监控信息的抓取;比如业务系统,某个时间点给某个人群用户发放优惠券,甚至从操作系统角度,人机交互进程、视频播放的实时进程、批处理的后台进程等进程间的调度。。。 所以如何将这些任务高效、精准的调度?是任务调度系统中最重要的命题,当然在业务系统中一个完善的任务调度系统是很复杂的,需要具备能调度、可视化管理、过程可追溯、结果可分析、持久化、高可用等特性,这篇文章主要讨论任务调度逻辑,其余的内容我们后面文章探讨。
任务调度:时间轮算法经典案例解析及应用实现