当调度中心是集群的情况下,是怎么保证调度不会重复的呢?
在xxl-job 的官方文档中是这样说的
基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
其中表结构是这样的
表结构如下
CREATE TABLE `xxl_job_lock` (
`lock_name` varchar(50) NOT NULL COMMENT '锁名称',
PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
这个表里只有一条记录
然后到xxl的源码中(因为整个类代码太长了,所以直截取了一小段)
public class JobScheduleHelper {
private static Logger logger = LoggerFactor