小李哥日常排坑之 java.util.Timer

204 阅读4分钟

兄弟们,好久不见,我是小李哥,今天来分享一下,小李哥的日常排坑。

最近,发现了微信视频音乐-家里有小孩的可以简单了解下,否则可以略过。

《奔波儿灞与灞波儿奔》

歌曲名称:奔波儿灞与灞波儿奔

我是灞波儿奔 

他是奔波儿灞

灞波儿奔波儿灞

两个快乐小妖怪

人见人爱美如花

我是奔波儿灞

他是灞波儿奔

灞波儿奔波儿灞

两个快乐小妖怪

宝塔里面藏起来

喝喝酒 吹吹牛

快活似神仙

唐僧真讨厌

扫塔到身边

孙猴子法力无边

唐僧唐僧救命啊

快把紧箍咒儿念

**进入正题 **

背景

一日,我的右眼总是跳个不停,心里想是不是有什么不好的事情发生,少顷,微信群里有一个陌生而又熟悉的人艾特了我。我定睛一看,这是业务线的同事老王吗?

老王:小李哥,咱们那个项目同步用户数据的定时任务是几点啊?
小李哥:王哥,那个定时是早上10点执行定时的
老王:那这批用户数据怎么没有同步过来呢?
小李哥:王哥,我看下日志
老王略带藐视的呵呵一笑说道
老王:呵呵,那麻烦你看下吧
小李哥:好的,有结果了,我通知你。

排坑进行时

小李哥,此时很纳闷,这个定时不是昨天才改的时间吗,从原来的17点改到了早上10点吗?

于是小李哥,决定登陆堡垒机,一探究竟。下李哥,三下五除二,登上堡垒机,查看日志,定时任务的执行时间时昨晚启动的时间 23 点,今天,定时任务并未执行。

难道是昨天上线的 class 文件没有替换吗?

下载到本地查看下

sz SyncUserData.class 

使用 IDEA 反编译了 class 文件发现代码里的时间是正确的。

难道是代码有问题?

小李哥的忠告 交接过来的老代码,小李哥并未仔细看,随手一改就上线了,说道此处,这是不应该的,也是小伙伴们以后要注意的地方。

下面看下这个定时代码吧

image.png

大家可以看看这代码有问题吗?思考三秒钟!

3

2

1

好的,时间到,经过小李哥的测试发现这个代码是没有问题的。

那为什么,到了指定的时间,定时并未执行呢?

其实是因为,小李哥上线时间是晚上23点,此时上线后,定时直接执行了一次,导致了定时第一次执行时间变成了上线时间。

那为什么会出现这种情况呢?

其实是因为这段代码对上线有要求,需要上线时间早于定时时间。假设上线时间晚于该定时时间,那么定时执行时间就会变成上线时间,反之,如果上线时间早于定时时间,那么定时执行的时间就会是代码里的时间了。

小李哥是怎么得出结论的呢?

多此一问,当然是些代码测试了

那如何解决呢?难道只能在定时时间之前上线吗,假如有多个定时怎么办呢?

当然是通过改代码了(因为是老项目,也没必要花时间去改造了)

image.png

简单说两句,其实就是判断定时任务执行时间和服务启动时间(部署服务时间 或 称上线时间)谁前谁后,如果服务启动时间大于定时执行时间那么需要将定时执行时间推至第二天。

总结

由于代码很简单,小李哥就不细说了,大家看看 java.util.Timer 定时就够了,简单说几点:

1、交接代码要仔细

2、改代码要慎重、要充分测试,不能想当然,随手一改(很容易出事儿)

3、做笔记,事后总结也很重要

4、关注小李哥

知乎搜索:搬砖小李哥

image.png

微信公众号关注:搬砖小李哥

扫码_搜索联合传播样式-标准色版.png