Quartz集群环境中调用scheduler.deleteJob(jobKey)无法删除作业的问题求助
Quartz集群环境中调用scheduler.deleteJob(jobKey)无法删除作业的问题求助
各位使用Quartz的小伙伴们,我最近在集群环境下遇到一个特别头疼的问题,调用scheduler.deleteJob(jobKey)明明返回了true,但作业就是删不掉,还一直在按原间隔触发,实在搞不懂哪里出问题了,来求助大家!
环境信息
- Quartz版本:2.3.2
- JobStore类型:JDBC(JobStoreTX)
- 集群配置:✅ 两台应用实例,共享同一个数据库
- 事务模式:JobStoreTX
作业创建与调度的代码
我是这样创建并调度作业的:
JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("someKey", "someValue"); JobDetail job = JobBuilder.newJob(jobClass) .withIdentity(jobKey) .usingJobData(jobDataMap) .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(intervalInSeconds) .repeatForever()) .startAt(DateBuilder.futureDate( ThreadLocalRandom.current().nextInt(1, intervalInSeconds), DateBuilder.IntervalUnit.SECOND)) .build(); scheduler.scheduleJob(job, trigger);
删除作业的操作
之后我尝试调用以下代码删除作业:
scheduler.deleteJob(jobKey);
我特意确认了这个调用的返回值是true,按道理应该删除成功了,但实际情况却完全不符合预期。
预期结果与实际结果
预期结果
作业从数据库中被彻底移除,不再继续触发。
实际结果
作业仍然按照原定的时间间隔持续触发,我查了数据库的情况:
- 作业依然存在于
QRTZ_TRIGGERS表中 JOB_DETAILS表中该作业的start_time还是两周前创建时的时间,说明不是被重新创建了- 触发行为完全没受影响,就像删除操作根本没执行过一样
我的猜测
我怀疑是不是集群环境下的竞态条件导致的?比如某个节点的缓存或者锁机制出了问题,导致删除操作没有在集群中同步?
有没有大佬遇到过类似的问题,或者能给我一些排查的方向?麻烦大家了!
内容来源于stack exchange
相关产品推荐
相关产品推荐

