Spring Boot 2.4 新特性,全新的Cron表达式处理机制
说起 cron 表达式大家一定不陌生,我们常用来作为定时任务执行策略规则。 在 Spring Boot 框架中 cron 表达式主要配合 @Scheduled 注解在应用程序中使用。 在 Spring Boot 2.4 (既 Spring 5.3)以后,引入了 CronExpression
表达式处理器来替代原有的 CronSequenceGenerator。
为什么要替代原有的 CronSequenceGenerator ? 此处理器是基于 java.util.Calendar
局限性比较大,无法完成last day of month
语义。
- 例如利用CronExpression 计算表达式下次执行时间
LocalDateTime now = LocalDateTime.now();
System.out.println("当前运行时间: " + now);
// 每小时执行一次
CronExpression expression1 = CronExpression.parse("0 0 0/1 * * *");
LocalDateTime nextTime = expression1.next(now);
System.out.println("每小时执行一次 -> 下次执行时间: " + nextTime);
// 每小时第十分执行一次
CronExpression expression2 = CronExpression.parse("0 10 0/1 * * *");
LocalDateTime nextTime2 = expression2.next(now);
System.out.println("每小时第十分执行 -> 下次执行时间: " + nextTime2);
- 执行结果
当前运行时间: 2020-11-14T23:04:46.302739
每小时执行一次 -> 下次执行时间: 2020-11-15T00:00
每小时第十分执行 -> 下次执行时间: 2020-11-14T23:10
新增常用表达式通用宏
对于非开发人员来说 cron 表达式并不容易理解,所以很难在出现错误的时候进行修复。比如笔者会把 cron 表达式 在在线网站 模拟运行一下,确认执行过程方便排查问题。
为了提高可读性,Spring Boot 现在支持以下代表常用表达式的宏。可以使用这些宏而不是六位的表达式,因此:
@Scheduled(cron = "@hourly")。
相当于
@Scheduled(cron = "0 0 * * * *")
其他常用宏命令
宏 | cron 表达式 | 含义 |
---|---|---|
@yearly | 0 0 0 1 1 * | 每年执行一次 |
@monthly | 0 0 0 1 * * | 每月执行一次 |
@weekly | 0 0 0 * * 0 | 每周执行一次 |
@daily 或@annually | 0 0 0 * * * | 每天执行一次 |
@hourly | 0 0 * * * * | 每小时执行一次 |
增强原有表达式 最后几天
每周的第几天
|
∨
* * * * * *
^
|
每月的第几天
如上其中的 每月的第几天
、每周的第几天
支持 最后几天 (L) 的语义
例如:
0 0 0 L * * 每月最后一天的零时
0 0 0 L-3 * * 每月最后第三天的零时 (L-d 格式)
0 0 0 * * 5L 每月最后的星期五零时 (dL 格式)
0 0 0 * * FRIL 每月最后的星期五零时 ( (星期一星期天的英文缩写)L 格式)
增强原有表达式 工作日
* * * * * *
^
|
每月的第几天
如上其中的 每月的第几天
支持 工作日 (W)的语义
例如:
0 0 0 1W * * 每月的第一个工作日零时
0 0 0 LW * * 每月的最后一个工作日零时
增强原有表达式 几周的星期几
每周的第几天
|
∨
* * * * * *
如上其中的 每周的第几天
支持 每月第几周的第几天语义
例如
0 0 0 ? * 5#2 每月第二周的星期五零时
0 0 0 ? * MON#1 每月周一的星期一零时
Spring Boot 2.4 新特性,全新的Cron表达式处理机制的更多相关文章
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
- Spring Boot 2.0 新特性和发展方向
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- 【2.0新特性】Spring Boot 2.0新特性
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- Spring Boot实践——Spring Boot 2.0 新特性和发展方向
出自:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Jav ...
- Spring Boot 2.0 新特性
这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码.在 Spring Boot 系列文章中会持续退出实践章节. ...
- Spring Boot 2.3 新特性优雅停机详解
什么是优雅停机 先来一段简单的代码,如下: @RestController public class DemoController { @GetMapping("/demo") p ...
- 原创 Spring Boot 2.3 新特性分层JAR
背景 在我们实际生产容器化部署过程中,往往会遇到 Docker 镜像很大,部署发布很慢的情况 影响 docker 镜像大小的因素,主要有以下三个方面: 基础镜像的大小 .尽量选择 aphine 作为基 ...
- 『Spring Boot 2.4新特性』减少95%内存占用
节省 95%的内存占用,减少 80%的启动耗时. GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus 默认支持 G ...
- 「Spring Boot 2.4 新特性」启动耗时详细监控
背景 Spring Boot 项目随着项目开发过程中引入中间件数量的增加,启动耗时 逐渐增加. 笔者在 <Spring Boot 2.4.0 正式 GA,全面拥抱云原生>文章评论下发现了 ...
随机推荐
- 「NGK每日快讯」12.11日NGK公链第38期官方快讯!
- 源码分析:Exchanger之数据交换器
简介 Exchanger是Java5 开始引入的一个类,它允许两个线程之间交换持有的数据.当Exchanger在一个线程中调用exchange方法之后,会阻塞等待另一个线程调用同样的exchange方 ...
- Java Reference核心原理分析
本文转载自Java Reference核心原理分析 导语 带着问题,看源码针对性会更强一点.印象会更深刻.并且效果也会更好.所以我先卖个关子,提两个问题(没准下次跳槽时就被问到). 我们可以用Byte ...
- Docker Tips: 关于/var/run/docker.sock
本文转载自Docker Tips: 关于/var/run/docker.sock 导语 你可能已经运行过docker hub上的container并且注意到其中的一些需要绑定挂载(mount)/var ...
- webpack4.X核心工具库之tapable实例对象Hook
一.tapable简介 tapable为webpack底层的核心工具库,webpack许多功能的实现都是跟它密不可分的,webpack的编译流程为配置初始化--->内容编译--->输出编译 ...
- 微信小程序:自定义组件
为什么要学习自定义组件? 1.用上我自己的单词abc,我希望在页面中展示椭圆形的图片, 2.打开手机淘宝,假如现在要做一个企业级项目,里面有很多页面,首页存在导航模块,点击天猫,进入第二个页面,而第二 ...
- POJ1852-换向思考
蚂蚁碰撞后反向与穿越的时间一样. 穷竭搜索---->想象力 #include<stdio.h> int main(void){ int n,len,ansNum,mintime,ma ...
- XXL-JOB v2.3.0 发布 | 易用性增强
转: XXL-JOB v2.3.0 发布 | 易用性增强 v2.3.0 Release Notes 1.[新增]调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略.立即补偿触发一次等: 2. ...
- 记一次Linux内核崩溃:kdump,crash,vmcore
原理 Linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore. 可以通过分析vmcore分析出内核崩溃的原因. crash是一个被广泛应用的内核奔溃转储文件分析工具.使用crash调试 ...
- Slenium详解
Slenium介绍 Selenium 是一个 Web 应用的自动化框架. 通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面. 比如点击界面按钮,在文本框中输入文字 等操作. 而且还能从 ...