xxl-job的调度中心为高可用的集群部署,那么是如何保证调度的一致性,不会出现多个机器同时触发一个任务,导致任务重复执行。调度中心通过DB锁,保持集群分布式调度的一致性,一次任务只触发一次。为了避免多个调度器同时调度任务,通过数据库的悲观锁(for update).
可以参看 JobScheduleHelper类代码
1 setAutoCommit(false)关闭隐式自动提交事务,
2 启动事务select lock for update(显式排他锁)
3 读db任务信息 -> 拉任务到内存时间轮 -> 更新db任务信息
4 commit提交事务,同时会释放for update的排他锁(悲观锁)
来源:oschina
链接:https://my.oschina.net/u/3126880/blog/4708746