Quartz群集问题



场景:我有两个不同的模块(比如A和B)。A部署在两台不同的机器上(如A1和A2),B部署在两个不同的机器中。(比如B1和B2),并且与a模块相关的作业被调度,并且所需的java类仅与a相关(所以A1和A2都具有它)。

我使用的是springframework石英豆,一旦tomcat上的模块启动,我就会在所有机器上启动一个调度器。

所有这些信息都存储在与石英相关的数据库表中。

最好的部分:在执行期间/执行之前,如果A1出现故障,幸运的是,如果调度程序发现A2空闲,作业将在A2上执行。所有必需的类都出现在A2上,所以没有问题。成功!

错误部分:在执行过程中/执行之前,如果A1出现故障,那么如果调度程序发现B1和B2空闲,那么作业将在它们中的任何一个上执行,但由于B1/B2上不存在所需的类,因此我得到了一个未找到类的异常。失败!

查询:我如何确保与模块A相关的作业只在部署了A的机器上运行,而不在部署了B的机器上。

提前感谢!

问题已解决:在quartz.properties文件中。按如下方式设置属性tablePrefix:

org.quarter.jobStore.tablePrefix=QRTZ_例如,模块A:A_QRTZ_和模块B:B_QRTZ_

在数据库中,删除所有以QRTZ_开头的表,并创建前缀为A_QRTZ_和B_QRTZ_ 的新表

因此,在上述场景下,模块A将只访问A_QRTZ_表,模块将只访问B_QRTZ_表格。

表的数量将增加,但最终,这些表中保存的行/数据总数将与以前相同。

最新更新