今年上半年做湖南移动的一个项目,要求将业务统计数据上报到移动北京总部,统计数据在每天的凌晨零点三十分上报,监控数据每隔半小时上报一次。在项目中采用了quartz调度框架来执行调度,至今,程序稳定的运行了大半年,而且也没有对该框架进行过深入的研究,只是按照它提供的例子稍作修改而写成的。如果没有集群等特殊的要求,quartz使用起来还是算很简单的。乘着有空,将quartz的使用小结一下,将调度相关的代码抽取出来,放在一个独立的Java工程里,方便以后的使用,另外也希望对想要使用quartz的同学有所帮助。
附件中的QuartzMain类演示了main()方法启动quartz
包org.gemma.quartz中的quartzMultiShedule类演示了启动多个任务,在QuartzSpringMain类的main()方法中加载spring的配置文件,就启动了quartz调度线程。
使用quartz的过程中,大部分的代码都大同小异,变化的是调度任务的corn表达式。下面是关于corn表达式的介绍:
Corn表达式介绍:
Cron 表达式包括以下 7 个字段:
• 秒
• 分
• 小时
• 月内日期
• 月
• 周内日期
• 年(可选字段)
特殊字符
Cron 触发器利用一系列特殊字符,如下所示:
• 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
• 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
• 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
• 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
• 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
更多知识:
http://www.ibm.com/developerworks/cn/java/j-quartz/index.html
关于quartz和应用的集群问题可以参考 http://ahuaxuan.iteye.com/blog/114965
下面是例子代码:
分享到:
相关推荐
Quartz的原理简介,可以实现任务的调度和定时的添加,在文中给了基础的使用方法的代码展示!!!!
NULL 博文链接:https://fanshuyao.iteye.com/blog/2392350
quartz学习总结 本文使用一系列代码示例介绍 Quartz.NET API,演示它的机制,例如作业、触发器、作业仓库。 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API
Quartz调度框架应用总结
总结了quartz调度中的一些使用情况
使用Quartz.net组件自动执行程序,c#程序,内含dll文件+文档解释+源码 自己总结的,很好用,建议下载
博文链接:https://daoger.iteye.com/blog/195486
NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169156
NULL 博文链接:https://baobeituping.iteye.com/blog/799324
Quartz定时任务常用的11张数据库脚本表结构,网上大部分都是只是说说,没有实际帮助,有的大部分积分还很贵,本人总结一下,希望能给有需要的人一些帮助。
Quartz框架介绍,环境搭建以及例子详细解释
Spring中Quartz的配置[总结].pdf
10_知识点检测与小结.mp4 11_Elastic-Job框架介绍.mp4 12_初识Elastic-Job.mp4 13_急速入门Simple-1.mp4 14_急速入门Simple-2.mp4 15_急速入门dataflow.mp4 16_急速入门script.mp4 17_知识点检测与小结.mp4 18_...
源码与竞赛资料:教育部认可的大学生竞赛备赛资料代码、源码、竞赛总结。 功能与质量保证:这个资源库是一个宝贵的学习平台,有助于他们深入了解计算机技术的原理和应用。这些源码经过测试和验证,可以直接运行,...
第一部分 Spring基础 第1章 开始Spring之旅 1.1 为什么使用Spring 1.1.1 J2EE开发者的一天 1.1.2 Spring的承诺 1.2 Spring是什么 ... 1.5.2 AOP使用 ... 1.7 小结 ... 11.6 小结
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.4.2aop使用 ...1.5小结 ...2.1.2使用应用上下文 ...2.3.2使用其他的bean ...2.4.2混合使用自动和手动装配 ...b.4小结