修改系统时间导致 @scheduled 定时任务执行时间不正确

问题:
我们的@scheduled 定时任务 有时候会突然出现执行时间不正确的现象

通过日志分析我
排出了
1.线程阻塞
2.CG 时间太久
同时我还发现 这些定时任务都延迟执行了,并且延迟的时间还是一样的都是2分钟
原本应该 2022-09-08 23:50:00 执行的 真实执行时间是 2022-09-08 23:52:00
原本应该 2022-09-08 23:40:00 执行的 真实执行时间是 2022-09-08 23:42:00
这就很奇怪了延迟执行还有规律了

于是我猜测这个应该与系统时间有关,后来询问运维同事,发现他们真的修改了系统时间,而且刚好调后了2分钟
问题这就基本定位了,现在就数验证了

我测试用例2个定时任务

一个任务:每天 10:00:00 执行一次
一个任务:没 5 分钟执行一次

  @Scheduled(cron = "0 0/3 * * * ? ")
    public void test1(){
        logger.error(String.format("每3分钟运行一次"));
    }

    @Scheduled(cron = "0 55 16 * * ?")
    public void test2(){
        logger.error(String.format("每天16:55:00运行一次"));
    }

日志打印

    [2022-09-19 16:41:00.001] []   @scheduled-11]3分钟运行一次
    [2022-09-19 16:47:50.812] []  [@scheduled-14]3分钟运行一次
    [2022-09-19 16:48:00.002] []  [@scheduled-10]3分钟运行一次
    [2022-09-19 16:51:00.002] []  [@scheduled-13]3分钟运行一次
    [2022-09-19 16:54:00.002] []  [@scheduled-1]3分钟运行一次
    [2022-09-19 16:57:00.005] []  [@scheduled-14]3分钟运行一次
    [2022-09-19 16:57:49.721] []  [@scheduled-7] 每天16:55:00运行一次

通过测试发现 第二行日志和最后一行日志有问题
第二行日志应该时 [2022-09-19 16:44:00.001] 才正确,以为我修改了时间
但是以为我 修改了时间 但是 [2022-09-19 16:47:50.812] 打印的日志
第三行之后的日又是正确的了,通过这个现象可以分析
总结:定时任务每次执行后会重新计算下次执行的倒计时,再下次执行之前,定时任务的执行时间和系统时间无关

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值