gpt4 book ai didi

java - Quartz Scheduler 在集群模式下的所有节点上触发 cron 作业

转载 作者:行者123 更新时间:2023-12-01 16:37:52 28 4
gpt4 key购买 nike

我有一个使用 Quartz 作为作业调度程序的应用程序。有两种情况

  1. 安排将来执行的作业。
  2. 每 10 秒运行一次的 cron 作业。

我运行应用程序的两个实例。两者都设置为集群模式,并且都将 instanceId 设置为“AUTO”。

这些是我的观察:

  1. 应用程序的两个实例都会启动并连接到数据库。两者都报告它们已成功集群并连接到数据库。

  2. 当我根据场景 1 安排作业时,在作业执行时只有一个应用程序执行该作业。

  3. 场景 2,即每 10 秒执行一次的 cron 作业,由两个应用程序同时执行。

  4. 我查看数据库中的 qrtz 表。 cron 作业只有一项作业和一个触发器。

  5. 我还在 qrtz 数据库“计划状态”表中观察到应用程序的两个实例都一致 checkin 。

以下是我设置 cron 作业的方法:

        val myCronJob = newJob(MyCronJob::class.java)
.withIdentity("cronjob", "cronJobGroup")
.build()

val trigger = newTrigger()
.withIdentity("cronjob", "cronJobGroup")
.startNow()
.withSchedule(simpleSchedule()
.withMisfireHandlingInstructionIgnoreMisfires()
.withIntervalInSeconds(10)
.repeatForever())
.build()

任何帮助或指导将不胜感激!

最佳答案

我认为您可以在作业类上使用 @DisallowConcurrentExecution 注释。

来自文档:将 Job 类标记为不得有多个的注释 *并发执行的实例(其中实例基于JobDetail * 定义 - 或者换句话说,基于 JobKey)。

关于java - Quartz Scheduler 在集群模式下的所有节点上触发 cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61922183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com