记一次Quartz定时任务排查TRIGGER_STATE状态为ERROR问题

前言

        为什么记录这个,主要是第一次使用Quartz开发定时任务,而且是集群式部署,生产环境两个实例,开发环境单实例但是有很多环境(这里要注意一下很多环境,坑人呐~),害我排查了好久,才找到问题根源!!

现象描述

        该项目之前就是用的Quartz开发的定时任务,线程池线程数配置的为3,

             

       集群式部署:

              

        我按照之前的开发方式新增加了一个任务类,并可以正常写入到表内,但是!!!有一个测试环境就可以完美运行,有一个环境跑起来要不不执行且该触发器状态变成ERROR,要么跑几次之后就变成ERROR,而且我查看的服务还没有错误日志,甚是郁闷!

排查问题过程

       1.我先去看官方文档,也是说了改状态表示触发器异常有问题,没有得到更多有用的支持;

       2.我在网上搜了一下类似问题,有提到版本问题,要保持一致;

       于是乎我将有问题环境当中知道的实例都停了,然后将qrtz_scheduler_state表(主要记录调度器状态)中唯一的一条记录删除(如果有多条,也是很明显有多个实例连接该数据库),过一个捡入周期刷新,发现又有一条记录写入!!!!说明有某个实例连接该数据库,于是可以执行一下sql查看连接数据库信息:

        SELECT DISTINCT * FROM `information_schema`.`PROCESSLIST` P WHERE P.USER NOT IN('root','repl','system user')

    你可以发现当前连接该数据库的主机地址等信息,

    随后根据主机地址找到了该隐藏很深的实例,把实例停掉,再起新代码实例,完美运行!

总结

        就是说如果多个实例共用一个库存储任务、触发器信息,那么就要保证各个实例上的代码版本一致,否则代码落后的实例获取到新触发器列表却没有任务类,那么就是将触发器状态置为ERROR。

 


 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值