Cron表达式解析与QuartZ Cron表达式配置说明
Cron表达式是一种在Unix和类Unix操作系统中用于设置周期性被执行的任务的方法,它由五个或六个(可选的秒)字段组成,每个字段代表一个时间单位,在Java的QuartZ作业调度框架中,cron表达式也用于指定任务的触发时间。
Cron表达式的结构
标准的cron表达式包含六或七个字段,分别表示:
秒(可选,059)
分(059)
小时(023)
日(131)
月(112 或者 JANDEC)
星期几(07,其中0和7都代表星期日,或者使用缩写如SUN, MON, TUE, etc.)
年(可选,通常省略)
QuartZ中的Cron表达式
在QuartZ中,Cron表达式的配置略有不同,特别是对于星期几的字段,QuartZ使用的是06的范围,其中0代表星期日,1代表星期一,依此类推。
示例
假设我们要创建一个每天上午10点15分触发的任务,Cron表达式可以是:
0 15 10 * * ?
如果我们想要创建一个每周一、三、五下午3点触发的任务,Cron表达式可以是:
0 0 15 * * MON,WED,FRI
在QuartZ中,我们需要注意以下几点:
1、支持问号(?): 在QuartZ中,问号可以用来代替不指定的值,例如在日和星期几的字段中,这表示“没有特定的值”,即不关心该字段的值。
2、支持逗号(,): 用于枚举多个值,例如在星期几的字段中列出多个星期几。
3、支持星号(*): 表示对应时间单位的每个值,例如每小时或每天。
4、支持减号(): 用于指定一个范围,例如在小时字段中使用"917"表示从上午9点到下午5点。
5、支持斜线(/): 用于指定值的增量,例如在分钟字段中使用"0/15"表示每隔15分钟。
6、年份字段: 通常省略,但如果需要可以加入。
相关问答FAQs
Q1: QuartZ是否支持年字段的Cron表达式?
A1: 是的,QuartZ支持年字段的Cron表达式,但通常情况下这个字段会被省略,因为它会使Cron表达式变得过于复杂且不常用。
Q2: 如果我想创建一个每个工作日的上午9点和下午5点各触发一次的任务,我应该如何编写Cron表达式?
A2: 你可以使用以下的Cron表达式来达到目的:
0 0 9,17 * * MONFRI
这个表达式表示在工作日的上午9点和下午5点各触发一次任务,注意这里使用了逗号来分隔两个不同的时间点,并且星期几的字段使用了范围表示法来包括从星期一到星期五的工作日。
Quartz cron表达式由六或七个空格分隔的时间字段组成,分别表示分钟、小时、日、月、星期几(可选)、年(可选),下面是一个介绍形式的Quartz Cron表达式配置说明:
时间字段 | 是否必须 | 描述 | 允许值 | 特殊字符 |
分钟 | 是 | 分钟域 | 059 | * / , |
小时 | 是 | 小时域 | 023 | * / , |
日 | 是 | 日期域 | 131 | * / , L W |
月 | 是 | 月份域 | 112 或 JANDEC | * / , |
星期几 | 否 | 星期域 | 07 或 SUNSAT | * / , L # |
年 | 否 | 年份域 | 19702099 | * / , |
以下是每个时间字段的详细说明:
分钟(Minutes):可以指定具体值(059),或者使用特殊字符。
小时(Hours):可以指定具体值(023),或者使用特殊字符。
日(Day of month):可以指定具体日期(131),或者使用特殊字符,注意,在某些月份不是所有日期都是有效的。
月(Month):可以指定具体月份(112 或 JANDEC),或者使用特殊字符。
星期几(Day of week):这是一个可选字段,可以指定具体星期几(07 或 SUNSAT),或者使用特殊字符,注意,如果使用这个字段,日字段和星期几字段需要至少有一个使用"?"字符。
年(Year):这是一个可选字段,如果使用的话,可以指定具体年份(19702099),或者使用特殊字符。
特殊字符说明:
:表示该域的任意值。
/
:指定时间间隔,例如0/15
在分钟域表示每15分钟。
,
:列出多个值,例如MON,WED,FRI
在星期几域表示星期一、星期三和星期五。
:指定范围,例如
917
在小时域表示上午9点到下午5点。
L
:表示最后一天或最后一个星期几,例如L
在日域表示月最后一天。
W
:表示工作日(星期一至星期五),只能用在日域,用来避免在周末触发。
#
:表示星期几的第几个,例如6#3
在星期几域表示每月的第三个星期五。
注意:如果使用了星期几字段,日字段通常用"?"来表示不指定具体日期,如果两个字段都指定了具体值,它们将产生冲突。
感谢观看,如果您有任何问题或意见,请在下方评论区留言。如果觉得内容有帮助,请点赞并分享给更多的人。谢谢!
评论留言