🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
spring cron表达式源码分析
在springboot中,我们一般是通过如下的做法添加一个定时任务
上面的new CronTrigger("0 * * * * *")
中的参数0 * * * * *
就是cron
表达式了。
这里主要是对
cron
表达式的源码进行分析,其他内容不再展开了。
这能看到会创建一个CronTrigger
对象,这个对象它主要就是用来包装解析后的cron
表达式,获取任务下次执行的时间。
在CronTrigger
构造方法中会调用到this.expression = CronExpression.parse(expression);
将我们传入的cron
字符串解析成为CronExpression
对象。
CronExpression
主要有一个next
方法,它会根据当前cron
表达式解析出来的对象,以及传入的时间,返回一个时间值,也就是下次任务执行的时间。
这里的入参需要实现Temporal
接口。这是在JDK8引入的一套全新的时间、日期。
能引入新的,至少说明之前的
Date
等等之类的时间处理是不能满足各方面需要的。
下面看看它的主要实现
这里我们一般常用的可能就是Instant
,LocalDateTime
,ZonedDateTime
了。
从上面就可以看到cron
表达式的处理,主要是分为两步:1、将cron
表达式字符串解析为CronExpression
对象;2、根据传入的时间计算下次任务的执行时间。
在分析源码之前,我们简单看几个java
中的类
ValueRange
主要用来表示时间、日期字段的有效范围。当然它也可以不用来表示时间、日期。下面我们简单看下它的使用。
它主要有4个字段,4个属性值从上到下是不小于的关系