38

我在用

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

4

1 回答 1

48

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

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

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

有关更多信息,请查看包含集群调度程序示例属性文件的官方文档。

于 2012-09-27T20:14:57.943 回答