java定时任务cron表达式每周执行一次,执行时间与实际时间不一样的坑!!!

java springboot 利用schedule执行定时任务是很常用的功能,有一个很常用的网站就是在线Cron表达式生成器,但是在这个网站最近遇到一个坑。

我要每周一下午一点执行一次,我把我写的表达式在这个网站验证了,是可以的,况且和日历比对也没问题,但是现在坑已经出现了!!!
java定时任务cron表达式每周执行一次,执行时间与实际时间不一样的坑!!!_第1张图片

 java定时任务cron表达式每周执行一次,执行时间与实际时间不一样的坑!!!_第2张图片

 但是查看服务器日志,发现执行是5月16日(周二执行的) ,比定时任务设定时间晚了一天

这这这,也太离谱了哇!!!!!

经过验证,每周几点执行一次的话,周一就是1,周二就是2,切记一定不要日期加1!!!

例如:每周一下午1点执行一次:

@Scheduled(cron = "0 0 13 ? * 1")

究其原因:

Quartz 和 springboot schedule中的cron表达式关于星期(周几)的不同表示

quartz 官方源码(org.quartz.CronExpression)解释:

Quartz中cron表达式可以由最多7个字段构成,即:秒、分、时、日、月、周、年,最后一个字段”年“则可以为空;

对于周几,即 “Day-of-Week”  其值 1,2,3,4,5,6,7分别表示 “SUN,MON,TUE,WED,THU,FRI,SAT”;

SpringBoot schedule cron表达式分析:

将cronExpression字符串中的 "SUN,MON,TUE,WED,THU,FRI,SAT"分别替换成了”0,1,2,3,4,5,6“;

总结:如果把握不住,周几就不要用数字表示了,直接用英文缩写:UN,MON,TUE,WED,THU,FRI,SAT

你可能感兴趣的:(java)