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日下午

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刘笑江的专栏

尝试解决 Xcode7.1 覆盖率测试 GCDA 文件损坏问题

1001
来自专栏FreeBuf

浅谈拒绝服务攻击的原理与防御(3)| 反射DDOS攻击利用代码

0×01 前言 之前发了一篇关于反射DDOS攻击原理以及反射资源扫描的文章,本来今天的这个应该并到那篇文章里,共称为反射DDOS攻击扫描与利用,但是我怕这样做会...

2029
来自专栏影子

给Ionic写一个cordova(PhoneGap)插件

1054
来自专栏腾讯Bugly的专栏

移动App入侵与逆向破解技术-iOS篇

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单...

8556
来自专栏点滴积累

geotrellis使用(二十一)自动导入数据

目录 前言 整体介绍 前台界面 后台控制 总结 一、前言        之前Geotrellis数据导入集群采用的是命令行的方式,即通过命令行提交spark任务...

3754
来自专栏数据小魔方

R语言笔记之——常用数据导入方式简介

因为之前旁听过几节R语言的课程,再加上自己练习数据可视化的需要(特别是可视化包——“ggplot2”),学了些R语言的皮毛。 总觉得基础没打牢,好高骛远、急于求...

3037
来自专栏地方网络工作室的专栏

Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全...

22210
来自专栏前端大白专栏

基于mpvue开发微信小程序(项目已开源)

1746
来自专栏TungHsu

【干货】什么?Python3.X不能输出中文?原来是编辑器geany的锅?!

小白说我要开始学Python了,既然3.X支持中文,那就学3吧。于是安装好Python环境,下载好geany就开始写了。 先写个“Hello World”吧,作...

3465
来自专栏Seebug漏洞平台

HCTF2017 部分 Web 出题思路详解

11月12日结束的HCTF2017,我总共出了其中4道题目,这4道题目涵盖了我这半年来接触的很多有趣的东西。下面就简单讲讲出题思路以及完整的Writeup。

3199

扫码关注云+社区