/**
* Copyright 2016 vip.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package com.vip.saturn.job.basic;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import com.vip.saturn.job.exception.JobException;
/**
* 作业运行时多片分片上下文.
* @author dylan.xue
*/
public class JobExecutionMultipleShardingContext extends AbstractJobExecutionShardingContext {
private static int initCollectionSize = 64;
/**
* 运行在本作业服务器的分片序列号集合.
*/
private List<Integer> shardingItems = new ArrayList<>(initCollectionSize);
/**
* 运行在本作业项的分片序列号和个性化参数列表.
*/
private Map<Integer, String> shardingItemParameters = new HashMap<>(initCollectionSize);
/**
* 数据分片项和数据处理位置Map.
*/
private Map<Integer, String> offsets = new HashMap<>();
public static int getInitCollectionSize() {
return initCollectionSize;
}
public static void setInitCollectionSize(int initCollectionSize) {
JobExecutionMultipleShardingContext.initCollectionSize = initCollectionSize;
}
public List<Integer> getShardingItems() {
return shardingItems;
}
public void setShardingItems(List<Integer> shardingItems) {
this.shardingItems = shardingItems;
}
public Map<Integer, String> getShardingItemParameters() {
return shardingItemParameters;
}
public void setShardingItemParameters(Map<Integer, String> shardingItemParameters) {
this.shardingItemParameters = shardingItemParameters;
}
public Map<Integer, String> getOffsets() {
return offsets;
}
public void setOffsets(Map<Integer, String> offsets) {
this.offsets = offsets;
}
/**
* 根据分片项获取单分片作业运行时上下文.
*
* @param item 分片项
* @return 单分片作业运行时上下文
*/
public JobExecutionSingleShardingContext createJobExecutionSingleShardingContext(final int item) {
JobExecutionSingleShardingContext result = new JobExecutionSingleShardingContext();
try {
BeanUtils.copyProperties(result, this);
} catch (final IllegalAccessException | InvocationTargetException ex) {
throw new JobException(ex);
}
result.setShardingItem(item);
result.setShardingItemParameter(shardingItemParameters.get(item));
result.setOffset(offsets.get(item));
return result;
}
@Override
public String toString() {
return String.format(
"jobName: %s, shardingTotalCount: %s, shardingItems: %s, shardingItemParameters: %s, jobParameter: %s",
getJobName(), getShardingTotalCount(), shardingItems, shardingItemParameters, getJobParameter()
);
}
}