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 条评论
登录 后参与评论

相关文章

来自专栏大内老A

WCF中的Binding模型之一: Binding模型简介

一、 信道层与服务模型层(Channel Layer and Service Mode Layer) 对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,...

1775
来自专栏我是东东强

TCP分段与IP分片的区别与联系

我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段(Segmentation),在接收时进行重组,同样IP数据报在长度超过一定值时...

1802
来自专栏运维小白

1-2 CCNA

物理介质:网线、光纤、网卡接口 ---- 568B:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕 一般网线中,只有1236传输数据 ---- 交叉线:连接同类型设备 ...

3008
来自专栏用户画像

第10章 广域网技术概述

61. 广域网接口多种多样,下列对于广域网接口的描述错误的是_B_。(选择一项或多项)

582
来自专栏互联网技术杂谈

udp的若干问题

参考链接:https://blog.csdn.net/dog250/article/details/6896949

42910
来自专栏java一日一条

每个 Android 开发者必须知道的消息机制问题总结

不能,一个线程对应一个Looper对象,通过ThreadLocal保证一个线程只有一个Looper与之对应,如果多次调用Looper.prepare();则会抛...

753
来自专栏Java编程

什么是框架?

张大胖立志走上Java之路, 听了大神Bill的指点, 先学了Java SE, 把集合、线程、反射、IO、泛型、注解之类的基础知识学了一遍, 在Bill的严厉督...

3307
来自专栏QQ会员技术团队的专栏

告知你不为人知的 UDP:疑难杂症和使用

本文承接《告知你不为人知的UDP:连接性和负载均衡》文章的下文,本文主要从UDP疑难杂症、UDP协议与TCP协议高效性的对比以及UDPd的使用场合这三个方面描述...

4.6K4
来自专栏码神联盟

【原创】浅谈网络协议

网络绝杀秘籍:OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对我们来说非常有帮助。一起来和小编复习下吧..... OSI七层模型: ...

2917
来自专栏测试开发架构之路

计算机网络基础知识笔记(三)

无分类编址CIDR(Classless Inter-Domain Routing,构造超网) 背景:在1992年因特网仍然面临三个必须尽早解决的问题,这就是:...

3728

扫码关注云+社区