2015-10-20 97 views
0

有没有人试过在多台机器上运行应用程序的同时启动Quartz Job应用程序?Quartz集群作业 - 多台主机 - 并行启动

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

如:

  1. 的就业登记和触发器失败:空 org.quartz.ObjectAlreadyExistsException:无法触发存储与名称:“triggerName”和组:“JOB_GROUP”,因为一个已经存在这种识别

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

有没有人遇到过这个问题,并得到解决? 你能分享一下你对这个话题的想法吗?

回答

0

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

- SchedulerFactoryBean.setOverwirteExistingJobs(true)

虽然开始并行所有实例,所有实例试图删除Quartz_JOB_DETAILS和Quartz_TRIGGERS表值。以上述错误结束。

但是,一旦我使用默认值“overwriteExisitingJobs为false”。这个问题已经消失。

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

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