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

大概内容

解析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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值