Quartz 任务强制删除
一、扯淡
公司调度平台使用 Quartz 框架实现,Job 信息持久化到 Oracle 数据库中;坑爹队友在开发环境开发了一个 Job,结果后期需求变更,又将此 Job 实现类移除,但移除代码前未删除相关的数据信息,导致数据库中残留相关 trigger、JobDetails 等信息,最终项目启动初始化 scheduler 失败,整个调度平台不可用……
二、强删 Job
1、排查报错原因 :
1 |
|
从日志中可以看出,某个 trigger 有问题,原因是其引用的 Job 实现类已经被删除
2、查出所有 Quartz 的表 :
1 |
|
所有 Quartz 表如下 :
3、删掉 trigger
查询所有 triger 相关的表,发现在 QRTZ_CRON_TRIGGERS 中有导致报错的 trigger(我们任务触发用的 cron 表达式方式),所以果断删除 :
1 |
|
4、启动测试
再次启动发现报错信息已经没有了,但是悲剧的发现无法创建任何任务,其报错信息大致的意思还是 class no found
,后排查发现 Job 相关的表中仍有残留的记录,所以同样需要清除
1 |
|
删除时发现,此条记录无法删除,报错是有级联信息,但是我翻了半天没找到,最终无奈根据报错信息,先找到其约束,将其置为级联删除,再删主记录,最后把约束级联删除改回 no action 即可
5、修改约束&&级联删除
删除 QRTZ_JOB_DETAILS 时报错如下:
查询该约束(图后截的,约束编号已变):
1 |
|
发现其约束 QRTZ_TRIGGERS 修改其约束级联删除关系:
此时再次删除即可,到此强删完成。
Quartz 任务强制删除
https://mritd.com/2016/06/07/force-delete-quartz-job/