2012-02-15 47 views
1

场景:我有两个不同的模块(比如A和B)。 A部署在两台不同的机器上(比如A1和A2),B部署在两台不同的机器上(比如B1和B2),并且与A模块相关的任务被调度,并且所需的java类只与A(so A1和A2都有)。石英聚类问题

我正在使用spring framework quartz bean,并在模块在tomcat上启动时立即在所有机器上启动调度程序。

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

最好的部分:在执行过程中/执行前,如果A1停机,幸运的是如果调度器找到A2空闲的,则该作业将在A2上执行。所有必需的类都出现在A2上,所以没问题。成功!

错误部分:执行期间/执行前,如果A1下降,如果调度程序发现B1和B2空闲,则作业将在其中任何一个上执行,但由于所需的类不在B1/B2上,因​​此i得到一个没有发现异常的类。失败!

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

在此先感谢!

回答

0

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

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

删除数据库中的所有表开始QRTZ_和创造新带有前缀A_QRTZ_和B_QRTZ_的表格

因此,模块-A将仅访问A_QRTZ_表格,并且模块将仅访问上述场景下的B_QRTZ_表格。

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