Quartz Cron表达式的二三事
最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report。
原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是 Quartz Cron表达式。
下面介绍下我学习的Quartz Cron表达式。
1. Quartz Cron表达式和Linux Cron表达式(Cron job)有何区别?
其实语法非常像。一个大的区别时,Quartz Cron表达式提供最后一个可选参数"年",而Linux Cron表达式没有。
2. Quartz Cron表达式语法
这里就附上一张官方的介绍表格。很多博文都有用到过。

只不过我觉得有几件事需要注意:
A. "*" 和 "?"的区别
"*"意为该域所有的值,"?"为不为该域指定值。具体用得时候,"?"只有Day of Month和Day of week用到,而且我们在用的时候这两个域有且只有一个"?",因为同时指定值是会有歧义的,你会不确定到底哪天来执行。
B. "L"的用法
这也是我们产品遇到的一个问题。最初我们在UI前台给用户的选项中如果是月度报告,提供了1-31天,31个选项来让用户选择。但是我们知道,有些月份,是没有31天得,最少的二月份可能只有28天。所以这样硬设定生成的Cron表达式会有问题,导致某些月份没有Report生成。所以这里我做了一下改进,利用Quartz表达式的"L"特性,"L"是指定为本月或本周的最后一天执行。
所以这里在UI上,我们显示的月天数选项是"1-28,last day"三个选项,理由如下:
a. 1-28,每个月至少有28天,用户选择后一定会在那天成功执行。
b. 用户选择"last day",我们就在每月最后一天执行,也能保证用户的报告每月生成。
当然我们在UI上还提供了一个时区的选项,时间要先根据时区做下转换,再用于生成Cron表达式。
3. 下面列出"每天","每月","每周"执行的Quartz Cron表达式的写法
A. 每天
秒 分 时 * * ?
B. 每月
秒 分 时 每月的哪天(1-31,或"L") * ?
C. 每周
秒 分 时 ? * 每周的哪天(1-7,注意1代表周日Sunday,而非周一Monday)
4. 参考
A. http://www.blogjava.net/fancydeepin/archive/2012/06/12/quartz-cron.html
Kevin Song
2015年4月13日下午
Quartz Cron表达式的二三事的更多相关文章
- Spring 调度工具Quartz cron 表达式的格式
http://chinaxxren.iteye.com/blog/839630 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但还是有少许明显的区别.区别之一就是 Quar ...
- Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)
原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但 ...
- Quartz Cron表达式 每周、每月执行一次
原文:https://blog.csdn.net/qq_33432559/article/details/75633767 系统中通常有些需要自动执行的任务,这些任务可能每隔一段时间就要执行一次,也可 ...
- Quartz 之Quartz Cron表达式
说到这个Quartz了,必不可少的就要说到我们的Triggger触发器,相信大家也都知道,我们在之前也说过了,Trigger又有两个子类,也就是两种方式,分别是:SimpleTrigger和CronT ...
- Quartz Cron表达式生成器
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0 ...
- [quartz] - Cron表达式举例
Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年2月14日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的SpringCloud学习笔记到云盘 ...
- quartz cron表达式在线生成
近期使用了quartz定时器,有感于起cron表达式有点复杂.且无法实时推断定时时间是否正确,因此写了个在线表达式及依据表达式获得前10次运行时间. 訪问地址例如以下:http://cron.g2ro ...
- quartz Cron表达式生成详解
简介 Cron作为一个Unix工具,已经存在很长一段时间了,用于实现任务调度的功能.CronTrigger类基于Cron而来. CronTrigger CronTriggers往往比SimpleTri ...
- QuartZ Cron表达式
Cron Expressions cron的表达式是字符串,实际上是由七子表达式,描述个别细节的时间表. Seconds Minutes Hours ...
随机推荐
- docker上安装eslaticsearch
一 elasticsearch安装 1 查找镜像: docker search elasticsearch 可以看到如下截图; 2 拉取镜像 docker pull elasticsearch 我并没 ...
- github 第三方登录
第三方登录先了解 OAuth 2.0 OAuth 协议的认证和授权的过程如下: 用户打开我的博客后,我想要通过GitHub获取改用户的基本信息 在转跳到GitHub的授权页面后,用户同意我获取他的基本 ...
- P1110 [ZJOI2007]报表统计 (multiset)
[题目链接] https://www.luogu.org/problemnew/show/P1110 有以下三种操作: INSERT i k:在原数列的第i个元素后面添加一个新元素k:如果原数列的第i ...
- WPF Canvas转换为位图 (RenderTargetBitmap)
使用 RenderTargetBitmap 的注意事项: 1. 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位 ...
- Linux系统lvm管理
pv: 物理卷,被pv命令处理过的物理分区vg:物理卷组 被组装到一起的物理卷pe: 物理扩展 lvm设备的最小存储单元 lvm是pe的整数倍lvm:逻辑卷 ...
- spring test: 配置文件优先级
application.properties 默认 application-xxx.properties 高 systemEnvironment 高 test/main/resources/ 同名文件 ...
- Yii2的框架笔记整理
1 .request的获取方式 $request = Yii::$app->request; 2. get参数的获取方式 $id = $request->get('id',1);获取get ...
- 2 Sum
Problem Given an array of integers, find two numbers such that they add up to aspecific target numbe ...
- cpp中memset函数的注意点
可参考: C++中memset函数的用法 C++中memset函数的用法 C++中memset()函数的用法详解 c/c++学习系列之memset()函数 透彻分析C/C++中memset函数 mem ...
- python绘制动态图
1.需要注意的问题 解决 MatplotlibDeprecationWarning: Using default event loop until function specific to this ...