应用重启后Quartz获取触发器详情时报错:未找到对应记录
嵌套异常是org.quartz.JobPersistenceException: 无法检索触发器:未找到键为?的Trigger记录,执行语句为:
SELECT * FROM QRTZ_CRON_TRIGGERS WHERE SCHED_NAME = ? AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?
触发器元数据表不一致
Quartz的任务元数据分散在多张关联表(如QRTZ_TRIGGERS、QRTZ_CRON_TRIGGERS)中,若某张表的触发器记录被误删、损坏,就会出现关联查询失败的情况。比如QRTZ_TRIGGERS存在记录,但对应的QRTZ_CRON_TRIGGERS记录缺失。
解决:检查Quartz全量表的完整性,手动补全缺失的触发器关联记录;或者直接删除无效的任务元数据,重新配置并发布任务。调度器名称(SCHED_NAME)配置不匹配
应用重启后,若Quartz配置的scheduler.name(Spring环境对应spring.quartz.scheduler-name)与数据库中QRTZ_*表的SCHED_NAME字段值不一致,查询时会无法匹配到目标数据。
解决:核对配置文件中的调度器名称与数据库存储值,确保两者完全一致。任务/触发器命名变更未同步
重启前若修改了任务或触发器的名称、组名,但未同步更新数据库中的对应记录,重启后Quartz会用新命名去查询旧记录,导致找不到匹配项。
解决:确认代码中任务/触发器的命名与数据库TRIGGER_NAME、TRIGGER_GROUP字段值一致;若有变更,要么同步更新数据库记录,要么删除旧元数据后重新创建任务。任务创建事务未提交
任务配置完成后,对应的数据库事务未正常提交,导致触发器元数据未持久化到数据库,重启后自然无法检索。
解决:检查任务创建逻辑中的事务处理,确保触发器数据成功写入数据库并提交事务。Quartz版本与表结构不兼容
不同版本的Quartz对数据库表结构有细微调整,若升级Quartz后未同步更新表结构,可能引发查询异常。
解决:对照当前Quartz版本的官方表结构脚本,对比现有数据库表,补全缺失字段或调整表结构。
内容的提问来源于stack exchange,提问作者Rochit Aggarwal

