当定时任务需要执行的时候,在AbstractElasticJobExecutor的execute方法中会通过jobFacade的getShardingContexts()方法来获取当前服务器的分片信息
public ShardingContexts getShardingContexts() {
//检查时候开启失效转移
boolean isFailover = configService.load(true).isFailover();
if (isFailover) {
// 获取运行在本作业服务器的失效转移分片项集合
List<Integer> failoverShardingItems = failoverService.getLocalFailoverItems();
if (!failoverShardingItems.isEmpty()) {
return executionContextService.getJobShardingContext(failoverShardingItems);
}
}
//如果有必要,那么进行一次分片操作
shardingService.shardingIfNecessary();
//获取本服务器的分片集合
List<Integer> shardingItems = shardingService.getLocalShardingItems();
if (isFailover) {
shardingItems.removeAll(failoverService.getLocalTakeOffItems());
}
//移除禁用的任务分片项
shardingItems.removeAll(executionService.getDisabledItems(shardingItems));