我在集群环境中使用 Quartz Scheduler 作为 Spring bean。
我有一些用@NotConcurrent 注释的作业,它们在每个集群中运行一次(即仅在一个节点中,仅在一个线程中)。
现在我需要在集群的每个节点上运行一个作业。 我删除了 @NotConcurrent 注释,但它只在一台机器上的每个线程上运行。它不会在其他节点上触发。
我应该用什么来注释作业?
示例:Job1 NotConcurrent annotated is scheduled at midnight => 它每个午夜只在一台机器上触发。 Job2 注释为午夜安排 => 它在每个午夜在每台机器上触发。
谢谢。
最佳答案
AFAIK Quartz 作业总是在 Quartz 选取的单个节点上执行。 @NonConcurrent 注解只会阻止 Quartz 在特定节点上并发执行相同的作业。
换句话说,你不能让 Quartz 在多个节点上同时执行一个作业。它总是选择一个节点来执行作业。
要实现您所描述的内容,您可能需要多个作业(使用相同的作业类并且没有关联的触发器)。然后,您将需要实现某种可以远程连接的编排器作业,例如通过 JMX 或 RMI,到各个节点并手动触发作业。
您可能想查看我们的产品 QuartzDesk (www.quartzdesk.com),它提供了一个网络服务,该服务提供了一个单一端点,您可以通过它连接到各个 Quartz 调度程序实例,例如,在它们上触发作业。
关于java - quartz 调度器 : Trigger some jobs on every cluster node and some only once per cluster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665688/