集群环境中的Quartz调度程序

ven*_*kat 32 quartz-scheduler

我在用

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

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

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

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

Apo*_*dis 41

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

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

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

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

  • 很好的答案.我相信一个澄清."quartz.properties文件的相同副本".我认为最好说"每个实例的属性文件的内容和设置必须具有相同的值"(它的分裂头发,但短语"相同的文件"可能会抛出一些)..此外,下一条评论将从文件中注明 (5认同)