记一次使用Quartz集群环境下,trigger_state error问题原因

项目场景:

项目里采用的定时任务是Quartz,配置的是集群持久化,多台节点连接同一个数据库。


问题描述:

新加的定时任务,跑了一两次就不执行了。一查询该任务的触发器状态变成ERROR,日志报Couldn’t retrieve job because a required class was not found;


原因分析:

因为是集群,有多个节点。报这个错误的意思是有节点执行定时任务时没有找到定时器的类,所以就把该定时任务的触发器的状态置为了ERROR。

可能的原因就是节点代码版本不一致。但是我反复确认了一下,代码版本都是一致的,后来我查询qrtz_job_details表一看,终于找到了问题所在,存在表里的job_class_name字段是代理类的路径。这就奇了怪了,为什么构建job信息获取bean的是代理类的路径。
在这里插入图片描述
在这里插入图片描述
一看是动态代理,应该是使用springAOP出现的问题。再一看项目里原来用AOP设置了切面进行异常日志的记录,拦截了所有的业务目录下的包。
在这里插入图片描述


解决方案:

在切面注解里排除掉定时任务的类,重启启动,在创建定时任务时获取到的就是路径正常了,定时任务也正常执行了。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java升级之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值