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

问题描述 投票:0回答:1

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

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

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

这些是我的观察结果:

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

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

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

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

  5. 我还在qrtz db的“预定状态”表中观察到,应用程序的两个实例都一直在签入。

这是我设置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()

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

java cron cluster-computing quartz-scheduler
1个回答
0
投票

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

来自文档:一种将Job类标记为不能包含多个的注释*实例并发执行(实例基于JobDetail*定义-换句话说,就是基于JobKey。

© www.soinside.com 2019 - 2024. All rights reserved.