java 解析cron_Quartz 源码解析(六) —— 解析Cron表达式

本文详细解析了Java Quartz库中Cron表达式的解析过程,包括Cron表达式的语法、相关的类和实现原理。Cron表达式由7个字段组成,如Seconds、Minutes等,每个字段允许特定的值和特殊字符。Quartz通过CronExpression类将表达式解析成7个TreeSet对象,用于计算触发时间。
摘要由CSDN通过智能技术生成

大概内容

解析Cron表达式

Cron表达式的语法规则

相关的类

实现原理

cron表达式的语法

Quartz的Cron表达式有6个必要的字段和1个可选的字段组成,各个字段以空格分隔。

字段名

允许的值

允许的特殊字符

Seconds

0-59

, - * /

Minutes

0-59

, - * /

Hours

0-23

, - * /

Day-of-month

1-31

, - * / ? L W

Month

0-11 or JAN-DEC

, - * /

Day-of-Week

1-7 or SUN-SAT

, - * / ? L #

Year (Optional)

empty, 1970-2199

, - * /

* : 用来表示任意值

? : 只能用在“Day-of-month”和“Day-of-Week”这两个字段,表示没有特定的值

- : 用来表示范围,例如在Hours字段配置“10-12”,解析过来就是小时数为10,11和12都满足。

, : 用来表示枚举值,例如在Day-of-Week字段配置“MON,WED,FRI”,解析过来就是星期一,星期三和星期五都满足。

/ : 用来表示增量逻辑,格式为“初始值/增量值”,例如在Seconds字段配置“5/15”,解析过来就是5,20,35,50都符合。

L : last的简写,只能用在“Day-of-month”和“Day-of-Week”这两个字段,

W : weekday的简写,只能用在“Day-of-month”字段,表示最靠近指定日期的工作日(星期一到星期五)

# : 只能用在Day-of-Week字段,“m#n”表示这个月的第n个星期m。

相关的类

CronExpression.java

CronScheduleBuilder.java

CronTriggerImpl.java

实现原理

转换为TreeSet对象

Cron表达式有7个字段,CronExpression把这7个字段解析为7个TreeSet的对象。

填充TreeSet对象值的时候,表达式都会转换为起始值、结束值和增量的计算模式,然后计算出匹配的值放进TreeSet对象。

举个例子,假如Cron表达式配置为:0/15 5-10 9,18 1,15 * ? 2018-2023

解析后在各个TreeSet对象的内容如下

// [0, 15, 30, 45]

protected transient TreeSet seconds;

// [5, 6, 7, 8, 9, 10]

protected tr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值