【问题标题】:Quartz scheduler in cluster environment集群环境中的 Quartz 调度器
【发布时间】:2012-09-19 12:49:06
【问题描述】:

我正在使用

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

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

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

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

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

    有关更多信息,请查看official documentation,其中包含集群调度程序的示例属性文件。

    【讨论】:

    • Quartz 的配置是通过使用属性文件 quartz.properties 来完成的。您必须在 quartz.properties 文件中设置上述属性。
    • 如果我在集群环境中有多个石英作业,我是否必须为每个作业定义一个单独的quartz.properties?
    • @Mahmoud。你的“每个”都是模棱两可的。 “对于每个工作”,答案是否定的。 “对于每个石英实例”,答案是肯定的。也请参阅我的下一条评论。
    • 很好的答案。我相信一个澄清。 “quartz.properties 文件的相同副本”。我认为最好将其表述为“每个实例的属性文件的内容和设置必须具有相同的值”(其分裂的头发,但短语“相同的文件”可能会抛出一些问题)。另外,下一条评论将有文档中的注释
    • 这是文档中关于设置的注释:“集群中的每个实例都应使用石英属性的相同副本。例外情况是使用相同的属性,允许以下内容例外:不同的线程池大小,以及“quartz.scheduler.instanceId”属性的不同值。”来源:quartz-scheduler.net/documentation/quartz-2.x/tutorial/…
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多