3

我有必须在集群模式下运行的作业以及需要在每个节点中运行的作业。我还需要非集群作业是持久的,因此我创建了两个调度程序,一个以集群模式运行,另一个以非集群模式运行,两者都使用与作业存储相同的一组石英表。这个设计有问题吗?我从 Quartz 配置参考中看到以下语句(http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJDBCJobStoreClustering)

永远不要针对任何其他实例正在运行 (start()ed) 的同一组数据库表启动 (scheduler.start()) 非集群实例。您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为但是没有解释,我不清楚这是否真的意味着。在不创建另一组石英表的情况下是否有其他选择。

4

1 回答 1

7

如果您启动两个不同名称的调度程序,您可以毫无问题地重用相同的表。作业、触发器和所有其他 Quartz 实体由包含调度程序名称的复合主键标识。这意味着集群调度程序使用不同的记录子集,并且永远不会接触非集群的记录。

另一种解决方案是使用不同的表集。Qurtz 允许您基于调度程序定义表前缀。

文档中的注释是关于具有相同调度程序名称的两个非集群应用程序使用相同数据库的情况。然后他们会严重地打断对方并引起各种问题。

于 2012-10-03T08:25:07.763 回答