当前位置: 首页 > 知识库问答 >
问题:

Quartz不延迟已在群集环境中启动的作业

仉伟兆
2023-03-14

我有quartz在集群中运行,并且我得到定期运行的作业。该作业在一台计算机中启动,其他计算机将保持到下一个执行时间。

我现在想要的是,如果前一次调用还没有完成,则延迟作业调用。例如:

10:00 - instance invocation#1
10:06 - invocation#1 finished
10:10 - instance invocation#2
10:13 - invocation#2 finished
10:20 - instance invocation#3
10:31 - invocation#3 finished // took longer than expected
10:31 - instance invocation#4 // start delayed
10:35 - invocation#4 finished

即使这样也是可以接受的:

10:00 - instance invocation#1
10:06 - invocation#1 finished
10:10 - instance invocation#2
10:13 - invocation#2 finished
10:20 - instance invocation#3
10:31 - invocation#3 finished // took longer than expected
10:40 - instance invocation#4 // waits for next timed invocation
10:44 - invocation#4 finished

我使用了类似触发器的cron表达式,它每10分钟触发一次(0/10***)。

共有1个答案

劳夕
2023-03-14

使用@disallowConcurrentExecution注释作业应该会起到作用。

 类似资料:
  • 我在WebSphere8.5.5上使用Quartz-2.2.3,在集群环境中,我有2个节点,每个节点上有3个JVM。 我正在应用程序启动时配置作业。 问题是作业在每个节点上配置一次,我希望它在两个节点上只配置一次,而不是每个节点上都配置一次。 我的配置如下: QuartzConfig.Properties: ApplicationContextListener:

  • 问题内容: 我希望在我的应用程序中使用石英调度程序,因为我有一个集群环境,并且想保证每小时只能运行一个工作实例。我的问题是…我是否必须使用JDBC作业存储库或某种形式的作业数据“外部”存储库,以确保集群中只有一个实例在任何给定的时间运行该作业,或者对Quartz来说,还有更多的魔力我知道吗? 问题答案: 是的,您需要使用JDBC- JobStore或TerracottaJobStore来启用节点相

  • 我有一个有两个节点的集群,它连接到同一个数据库,还有一个调度作业,由Quartz调度程序每10分钟启动一次。在quartz.properties中设置。 我感兴趣的是,调度程序是否会为同一节点发出作业,直到每隔10分钟可到达该节点为止,或者它使用某种算法来确定哪个节点将执行该作业。 我在文档(http://www.quartz-scheduler.org/documentation/quartz-

  • 相关:Quartz群集-服务器启动时触发器重复 null 这是很好的,但我担心的是,当两个实例完全同时启动时,可能会出现竞争情况。因为在这段代码周围没有全局锁,集群中的所有节点都将尊重它,如果两个实例同时联机,我可能会得到重复的作业或触发器,这就违背了这段代码的要点。 在集群环境中是否有自动定义Quartz作业和触发器的最佳实践?还是我需要自己设置锁?

  • 有没有人尝试在多台计算机中并行启动Quartz作业应用程序? 我在我的应用程序中创建了Quartz集群作业,它在多台计算机中运行。石英工作良好,当我开始应用程序顺序,在所有主机一个接一个。然而,当我并行启动应用程序时,我会得到一些不同类型的错误。 例如: > 作业和触发器注册失败:null org.quartz.objectalreadyexistsexception:无法存储名称为“Trigge

  • 我正在使用 这是可行的,但当我使用集群环境时,两个线程正在为同一作业运行。 我使用的是注释而不是属性文件。我只想运行一个线程。有人能帮忙吗。如何配置? 我的代码几乎像:http://k2java.blogspot.com/2011/04/quartz.html