【问题标题】:Quartz Clustering issue石英聚类问题
【发布时间】:2012-02-15 13:19:11
【问题描述】:

场景:我有两个不同的模块(比如 A 和 B)。 A 部署在两台不同的机器上(比如 A1 和 A2),B 部署在两台不同的机器上。(比如 B1 和 B2),并且安排了与 A 模块相关的作业,并且所需的 java 类仅与 A 一起使用(所以两者A1 和 A2 都有)。

我正在使用 spring 框架石英 bean,并在 tomcat 上启动模块后立即在所有机器上启动调度程序。

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

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

坏部分:如果 A1 出现故障,则在执行期间/之前执行,不幸的是,如果调度程序发现 B1 和 B2 空闲,则作业将在其中任何一个上执行,但由于 B1/B2 上不存在所需的类,我得到类未找到异常。失败!

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

提前致谢!

【问题讨论】:

    标签: cluster-computing quartz-scheduler scheduler


    【解决方案1】:

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

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

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

    因此,在上述场景下,模块-A 将仅访问 A_QRTZ_ 表,而模块将仅访问 B_QRTZ_ 表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多