项目中要用到定时任务,就直接用了spring boot自带的定时任务,没有用quartz等定时任务框架
在写表达式时,定义为每周一凌晨 1:15 分执行,但是周一查看日志,发现没有执行该任务,很奇怪。。。
后来自己手工执行了一下,但是手工执行也不是个事啊,然后跟踪进去看了下解析时间表达式的代码
网上很多都是如下解说的cron时间表达式:
都说的是 用英文或者 数字,数字 1=SUN 表示周日,我跟代码进去,发现都是瞎扯。。。
表达式中周几的位置,传数字进去,数字是几,就代表周几,上图如下:
表达式如下:
解析表达式结果如下:dayOfWeek : 2 这代表周二
我把表达式 代表周几的不问 改为周1的英文,MON,解析表达式结果如下: dayOfWeek : 1 代表周1
是不是很坑。。。。不知道是版本问题,还是大家用的都是英文,没用数字来表达周几
解析周几的时候,这里进去:
数字2 和 代表周几的英文字母去匹配,匹配不到就返回数字2
当传进去代表周一的MON时,MON和系统定义的字符串匹配,返回的就是MON在字符串数组中的下标位置,可以看到SUN在下标0的位置,MON在下标1的位置,此时返回1,代表周1:
记录一下这个小坑,用于以后避免