java springboot 利用schedule执行定时任务是很常用的功能,有一个很常用的网站就是在线Cron表达式生成器,但是在这个网站最近遇到一个坑。
我要每周一下午一点执行一次,我把我写的表达式在这个网站验证了,是可以的,况且和日历比对也没问题,但是现在坑已经出现了!!!
但是查看服务器日志,发现执行是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“;