基于Quartz的定时任务及crond表达式入门学习

时间:2022-07-28
本文章向大家介绍基于Quartz的定时任务及crond表达式入门学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

[TOC]

0x00 前言

0x01 基础语法

Java中Quartz Cron表达式(Cron Expressions—Cron 表达式)被用来配置CronTrigger实例,需要注意一点它不同于Linux中Cron表达式,我们从下面的格式可以看出区别;

Cron表达式是一个由7个子表达式组成的字符串, 每个子表达式都描述了一个单独的日程细节并且采用空格分隔;

#Linux crond
分钟 小时 天 月 周 Command
*    *    *  *  * 命令执行

#Quartz Cron
* * * * * * ? 
秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(1970-2099)

PS:从上面的比对中可以看出Quartz的Cron表达式比Linux中的Cron表达式更为强大和精细;

特殊字符含义:

, : 其表示一个列表如(9,10,11,12)
- : 其表示一个连续的区间如(9-12) , 例如:子表达式(天(星期))可以为 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT” ;
* : 其表示一个通配符即 “*”字符代表所有可能的值 
/ : 其表示一个指定数值的增量,如一个间隔时间(8-18/4)(/表示每隔4小时),在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟 ;
? : 其字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值, 当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?” 
L : 字符仅被用于天(月-最后一天)和天(星期-最后一周)两个子表达式,它是单词“last”的缩写, 但是它在两个子表达式里的含义是不同的。  例如:“6L”表示这个月的倒数第6天,FRIL表示这个月的最一个星期五;

基础示例:

#示例1.每天上午10点,下午14点,16点触发执行
0 0 10,14,16 * * ?

#示例2.朝九晚五工作时间内每半小时
0 0/30 9-17 * * ?


#示例3.由于"月份中的日期 天(月)"和"星期中的日期-天(星期)"这两个元素互斥的,必须要对其中一个设置?. 
0 0 12 ? * WED  #表示每个星期三中午12点

注意事项:

  • 1.在使用“L”参数时,不要指定列表或范围,因为这会导致问题