关于cron4j-plugin的一个实际案例(被坑了)

前几天在jfinal项目中测试cron4j,发现一个问题,在社区搜了很久都没有解决

开始我的配置文件是这么写的,注意cron表达式

cron_jobs = job.task1, job.task2  
  
#* cron 表达式由五部分组成:分 时 天 月 周  
#* 分 :从 0 到 59  
#* 时 :从 0 到 23  
#* 天 :从 1 到 31,字母 L 可以表示月的最后一天  
#* 月 :从 1 到 12,可以别名:jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov" and "dec"  
#* 周 :从 0 到 6,0 表示周日,6 表示周六,可以使用别名: "sun", "mon", "tue", "wed", "thu", "fri" and "sat"  
#*  
#* 数字 n:表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行  
#* 逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行  
#* 减号 -:表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行  
#* 星号 *:表示每一个时间点,例如 * * * * * 表示每分钟执行  
#* 除号 /:表示指定一个值的增加幅度。例如 n/m表示从 n 开始,每次增加 m 的时间点执行  
job.task1.cron = 0/2 * * * *
job.task1.class = com.wumugulu.test.crontab.FirstTask
job.task1.daemon = false
job.task1.enable = true
  
job.task2.cron = 1/2 * * * *
job.task2.class = com.wumugulu.test.crontab.SecondTask
job.task2.daemon = true
job.task2.enable = true


注意看上面代码的最后一行注释:“#* 除号 /:。。。”我的本意是让

FirstTask在每个小时的0,2,4,6,8。。。58分各执行一次

SecondTask在每个小时的1,3,5,7,9。。。59分各执行一次


但是,并没有达成目的,实际情况是每个小时FirstTask和SecondTask分别只在0分和1分执行了一次;而下一次执行就是1小时之后了(想想我浪费了多少时间吧,汗~~~);

估计和这位兄弟的情况类似 http://www.jfinal.com/share/425


网上查了很多帖子,开始一直以为是自己代码写的有问题,折腾了好几天没搞定;

后来实在没办法了,上到cron4j的官网看了下,发现了问题:


官网资料上显示cron表达式中关于除号,

并没有n/m”的用法(但网上很多资料都是这么写的,汗~~~)

官网介绍的只有“*/m”和“n1-n2/m”两种用法;


于是把我的配置文件改了下:


job.task1.cron = 0-59/2 * * * *

job.task2.cron = 1-59/2 * * * *


测试,结果正确。搞定,打完收工~~~

评论区

JFinal

2017-12-15 11:50

感谢你的分享

这个问题确实有点不好弄,所以后来我改进了 jfinal 手册中有关的内容,对例子进行了加强,建议下载一份最新版本的 jfinal 手册

prelove

2017-12-22 15:18

cron4j不支持秒还是用quartz好一点

热门分享

扫码入社