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

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“;

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值