我有一个使用Quartz作为作业调度程序的应用程序。有两种情况
我运行了我的应用程序的两个实例。两者都设置为集群模式,并且都将instanceId设置为“ AUTO”。]
这些是我的观察结果:
应用程序的两个实例都启动并连接到数据库。两者都报告它们已集群并成功连接到数据库。
当我根据场景1安排作业时,在执行作业时,只有一个应用程序执行该作业。
方案2,即每10秒执行一次的cron作业,正在同时由两个应用程序执行。
我查看数据库中的qrtz表。 cron作业只有一个作业和一个触发器。
我还在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()
任何帮助或指导将不胜感激!
我认为您可以在作业类上使用@DisallowConcurrentExecution批注。
来自文档:一种将Job类标记为不能包含多个的注释*实例并发执行(实例基于JobDetail*定义-换句话说,就是基于JobKey。