Quartz Scheduler:在每个集群节点上触发一些作业,每个集群只触发一些作业

时间:2014-05-14 21:44:58

标签: java spring cluster-computing quartz-scheduler job-scheduling

我在集群环境中使用Quartz Scheduler作为Spring bean。

我有一些使用@NotConcurrent注释的作业,它们每个集群运行一次(即仅在一个节点中运行,仅在一个线程中)。

现在我需要在群集的每个节点上运行一个作业。 我删除了@NotConcurrent注释,但它只在一台机器上的每个线程上运行。它不会在其他节点上被触发。

我应该用什么来注释这份工作?

示例:Job1 NotConcurrent annotated安排在午夜=>它每隔午夜只在一台机器上发射。 Job2注释安排在午夜=>它每隔午夜就在每台机器上开火。

谢谢。

1 个答案:

答案 0 :(得分:7)

AFAIK Quartz作业总是在Quartz选择的单个节点上执行。 @NonConcurrent注释仅阻止Quartz在特定节点上同时执行相同的作业。

换句话说,您无法使Quartz同时在多个节点上执行作业。它总是选择一个节点来执行作业。

要实现您描述的内容,您可能需要多个作业(使用相同的作业类且没有关联的触发器)。然后,您需要实现某种可以远程连接的协调器作业,例如:通过JMX或RMI,到各个节点并手动触发作业。

您可能需要查看我们的产品QuartzDesk(www.quartzdesk.com),该产品提供了一个Web服务,该服务提供单端点,您可以通过该端点连接到各个Quartz调度程序实例,例如,触发它们上的作业。

相关问题