XXL-JOB 行锁
调度中心支持多节点部署,基于数据库行锁,保证触发器的名称和执行时间相同,则只且仅有一个调度中心节点去下发任务给执行器。
核心代码可见 XXL-JOB 的 JobScheduleHelper#start() 方法:
// JobScheduleHelper.java
// 获得行锁
conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
// ...触发任务调度
// 事务提交
conn.commit();