场景:我有两个不同的模块(比如A和B)。 A部署在两台不同的机器上(比如A1和A2),B部署在两台不同的机器上(比如B1和B2),并且调度了与A模块相关的工作,并且所需的java类只有A(所以两者都是A1和A2有它)。
我正在使用spring框架石英bean,并在模块启动tomcat后立即在所有机器上启动调度程序。
所有这些信息都存储在与quartz相关的数据库表中。
最佳部分:在执行期间/之前,如果A1发生故障,幸运的是,如果调度程序发现A2空闲,则作业将在A2上执行。所有必需的类都出现在A2上,所以没问题。成功!
错误部分:在执行期间/之前,如果A1发生故障,不幸的是如果调度程序发现B1和B2空闲,则作业将在其中任何一个上执行,但由于B1 / B2上不存在所需的类,我得到找不到类的例外。失败!
查询:如何确保与模块A相关的作业仅在部署了A的计算机上运行,而不在部署了B的计算机上运行。
提前致谢!
答案 0 :(得分: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_表。
表的数量会增加,但最终,这些表中保存的行/数据总数将与之前相同。