集群环境中的Quartz调度程序

时间:2012-09-27 16:53:31

标签: quartz-scheduler

我正在使用

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
Trigger asapTrigger = getAsapTrigger();
JobDetail asapJob = getAsapJobDetails();
scheduler.scheduleJob(asapJob, asapTrigger);

这是有效的,但是当我使用群集环境时,2个线程正在为同一个作业运行。

我使用的是注释而不是属性文件。我想只运行一个线程。有人可以帮忙吗?如何配置?

我的代码几乎看起来像:http://k2java.blogspot.com/2011/04/quartz.html

1 个答案:

答案 0 :(得分:36)

您必须将Quartz配置为在群集环境中运行。群集当前仅适用于JDBC作业存储,并且通过使群集的每个节点共享同一数据库来工作。

  • 如果您有多个使用相同数据库表的Quartz实例,请将 org.quartz.jobStore.isClustered 属性设置为 true 。此属性用于打开群集功能。
  • 设置 org.quartz.jobStore.clusterCheckinInterval 属性(毫秒),该属性是此实例与群集的其他实例签入的频率。
  • org.quartz.scheduler.instanceId 设置为 AUTO ,以便群集中的每个节点都具有唯一的instanceId。

请注意,群集中的每个实例都应使用quartz.properties文件的相同副本。此外,如果您在不同的机器上使用群集,请确保它们的时钟同步。

有关详细信息,请查看包含群集计划程序的示例属性文件的official documentation