一、场景描述
公司系统需要增加一些定时任务,最开始是每个定时任务都配置一个专用的调度工厂、触发器等等。后来公司项目越来越大,需要配置的定时任务越来越多,定时任务的时间策略等需要变动的时候必须修改配置。这些问题越来越多,于是就建表,写了个专门扫表获取相关定时任务的触发器。除了这个之外别的触发器通通配置在表里。
二、问题与调试
1、某天报生产问题,业务报表出错,经查,发现是报表的定时任务重复执行的原因。把附近日志打印输出,无异常发生。
2、去询问技术是否有改动数据库的定时任务时间策略,得到信息,有同事更改过另一个定时任务的时间策略。但并不会造成重跑
3、在测试环境启动各定时任务,随机更改某一个批的时间策略。写了一个监控执行次数的脚本,经过数据对比发现当时间策略改变的时候,偶尔会随机造成某个定时任务重复执行。原因找到了
4、google之,只搜索到只言片语。
三、问题解决方法
第一种:每次更改时间策略的时候尽量保证定时任务不与数据库交互信息
第二种:每次更改后重启
第三种:代码逻辑可以重跑
四、补充
除了上述原因外,要注意触发器名称,调度工厂名称是否重复,如果重复也会发生上述问题