平时使用Spring定时器还是蛮频繁的,一般都是秒级,分钟级
比如说每十秒一次触发
@Scheduled(cron = "0/10 * * * * ?")
运行结果
每二十分钟一次触发
@Scheduled(cron = "0 0/20 * * * ?")
运行结果
看起来都是没问题的,很正常
但如果变成四十分钟一次呢
@Scheduled(cron = "0 0/40 * * * ?")
运行结果就会变成这样
可以看到周期不完全是四十分钟,还有二十分钟的
每个周期不够的没有顺延到下一个周期
所以要换一种写法,比较笨的写法,但是可以满足每四十分钟触发一次的要求
需要写两个定时器
@Scheduled(cron = "0 20 1,3,5,7,9,11,13,15,17,19,21,23 * * ?")
@Scheduled(cron = "0 0,40 0/2 * * ?")
这样的话就可以正常运行了
运行结果
这两个结果拼起来,就是对的了