quartz集模式下qrtz_triggers表trigger_state变ERROR分析

quartz集模式下qrtz_triggers表trigger_state变ERROR分析
最近在正式环境新增了⼀个定时任务,项⽬启动后,新增的任务总是跑⼀两次就不跑了,排查发现trigger_state变为ERROR了。
⼀、Quartz重要表含义过氧化氢浓度测定
1)qrtz_calendars:以Blob类型存储Quartz的Calendar⽇历信息, quartz可配置⼀个⽇历来指定⼀个时间范围。
2)qrtz_cron_triggers:存储Cron Trigger,包括Cron表达式和时区信息。
3)qrtz_fired_triggers:存储已经触发的trigger相关信息,trigger随着时间的推移状态发⽣变化,直到最后trigger执⾏完成,从表中被删除。
4)qrtz_job_details:存储每⼀个已配置的Job的详细信息。
5)qrtz_scheduler_state:存储少量的有关 Scheduler的状态信息,和别的 Scheduler 实例(假如是⽤于⼀个集中)。
强电井6)qrtz_simple_triggers:存储简单的 Trigger,包括重复次数,间隔,以及已触的次数。贴片式称重料位计
7)qrtz_triggers:存储已配置的 Trigger的信息。
⼆、任务查询
查询qrtz_job_details、qrtz_triggers、qrtz_cron_triggers这三张表即可查到对应定时任务信息。
三、原因分析
1、任务启动后可以正常跑完⼀次,且在测试时代码正常运⾏,说明代码是没有问题的;
2、通过更改qrtz_triggers表trigger_state状态为WAITING和next_fire_time(下次触发时间)让任务执⾏后,⼀段时间
后,trigger_state⼜变成ERROR,且只有新增任务式这样,其他定时任务都可以正常跑,确定问题出在新的任务上;
3、检查qrtz_scheduler_state表查看是否存在多条记录,如果有多条,只留⼀条;
绝缘子串4、检查集环境,或者查看是否有其他环境也和正式环境共⽤⼀个数据库,检查后发现,有个备⽤服务器,并未配置负载均衡,但是⽤的是正式数据库且上⾯的应⽤为启动状态,检查服务器上部署的
应⽤发现服务器上的包并未更新,这个包并不包含新增的任务,关掉备⽤服务器,发现正式环境上的任务可以正常运⾏了。v型钢
注:
查看任务下次触发时间
select qt.*,to_date('1970-01-01 08:00:00','yyyy-mm-dd hh24:mi:ss')+
<_fire_time /1000/24/60/60 nextFireTime,sysdate
from qrtz_triggers qt
问题总结:nidd
使⽤quartz集模式时,若集节点中应⽤服务器打的包版本不⼀致或者其他服务器⽤⾮最新版本包且与正式环境共⽤⼀个数据库时,就会出现qrtz_triggers表trigger_state变ERROR情况,从⽽导致定时任务不能正常运⾏。究其原因quartz执⾏任务调度是根据数据库表中的记录执⾏的,如果执⾏到没有对应代码的节点时,trigger_state就会变成ERROR。

本文发布于:2024-09-22 13:21:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/307569.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   服务器   时间   环境   查看   状态
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议