项目场景:
项目里采用的定时任务是Quartz,配置的是集群持久化,多台节点连接同一个数据库。
问题描述:
新加的定时任务,跑了一两次就不执行了。一查询该任务的触发器状态变成ERROR,日志报Couldn’t retrieve job because a required class was not found;
原因分析:
因为是集群,有多个节点。报这个错误的意思是有节点执行定时任务时没有找到定时器的类,所以就把该定时任务的触发器的状态置为了ERROR。
可能的原因就是节点代码版本不一致。但是我反复确认了一下,代码版本都是一致的,后来我查询qrtz_job_details表一看,终于找到了问题所在,存在表里的job_class_name字段是代理类的路径。这就奇了怪了,为什么构建job信息获取bean的是代理类的路径。