You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot Quartz实现:如何仅在单台机器运行调度器

问题解答

@DissallowConcurrentExecution不能解决你这个多机器部署的重复执行问题。

这个注解的作用很明确:它只是用来阻止同一个JobDetail实例在单台机器上被多个线程同时执行,说白了就是管单机器内的并发冲突,完全覆盖不了多机器的场景——两台机器上的调度器是独立的进程,这个注解根本管不到对方。

要实现多机器只让一台跑调度、避免重复操作的需求,有两种靠谱的方案:

  • 用Quartz集群模式:把两台机器的Quartz配置成共享同一个数据库作为任务存储(不能用内存存储RAMJobStore,得用JDBC类型的JobStoreTX/JobStoreCMT)。Quartz集群会自动通过数据库做分布式协调,同一个定时任务只会被集群中的某一个节点触发执行,天然避免重复。
  • 手动实现分布式锁:在任务执行前,先通过数据库行锁、Redis锁这类分布式锁机制抢占执行权,只有拿到锁的节点才继续执行任务,没拿到的直接跳过。不过这种方式需要自己处理锁的过期、异常释放等细节,稳定性不如Quartz原生的集群模式。

内容的提问来源于stack exchange,提问作者Kenez92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:27:02