石英集群作业 - 多台主机 - 并行启动

Quartz Clustered job - multiple hosts - Parallel Startup

有没有人尝试在多台机器上并行启动 Quartz Job 应用程序 运行?

我在多台机器上运行的应用程序中创建了 Quartz Clustered 作业。 当我在所有主机中依次启动应用程序时,Quartz 工作正常。但是,当我并行启动应用程序时,出现了几种不同类型的错误。

如:

  1. 作业和触发器注册失败:null org.quartz.ObjectAlreadyExistsException: 无法存储名称为 'triggerName' 组为 'JOB_GROUP' 的触发器,因为已经存在具有此标识的触发器

  2. ORA-02292: 违反完整性约束 (QUARTZ_CRON_TRIG_TO_TRIG_FK) - 找到子记录

有没有人遇到过这个问题并解决了? 能否分享一下您对这个话题的看法?

这个问题来了,因为我创建了具有以下属性的 SchedulerFactoryBean。

-- SchedulerFactoryBean.setOverwirteExistingJobs(true)

在并行启动所有实例时,所有实例都试图删除 Quartz_JOB_DETAILS 和 Quartz_TRIGGERS table 值。以上述错误结束。

但是,一旦我使用默认值 "overwriteExisitingJobs is false"。这个问题已经消失了。

我面临的唯一问题是,每次更改 cron 触发器值时,我都会从数据库中删除 JOB 信息,它将在启动第一个调度程序实例时重新创建。

delete from QRTZ_CRON_TRIGGERS;
delete from QRTZ_TRIGGERS;
delete from QRTZ_JOB_DETAILS;
delete from QRTZ_LOCKS;
commit;