load数
private final ExecutorService executorService = Executors.newFixedThreadPool(20); #线程池。可execute也可submit
List<Future<List<OrderChildTask>>> futures = new ArrayList<Future<List<OrderChildTask>>>(); #承接
CompletionService<List<OrderChildTask>> completionService = new ExecutorCompletionService<List<OrderChildTask>>(executorService); #不用承接
for(long i = 0; i < tableNum; i++) {
final long tableIndex = i;
futures.add(executorService.submit(new Callable<List<OrderChildTask>>() {
public List<OrderChildTask> call() throws Exception {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("orderId", tableIndex);
paramMap.put("retryCount", retryCount);
paramMap.put("limit", limit);
return shardingSqlMapClientTemplate.queryForList("OrderChildTaskDAO.findWaitProcessTasks", paramMap); ##未来add进去。线程池提交callable
}
}));
}
List<OrderChildTask> datas = new ArrayList<OrderChildTask>();
for (int i = 0; i < futures.size(); i++) {
try {
datas.addAll(futures.get(i).get()); #阻塞逐个取出来
} catch (InterruptedException e) {
log.error("findWaitProcessTasks", e);
} catch (ExecutionException e) {
log.error("findWaitProcessTasks", e);
}
}
return datas;
List<MonitorDO> list = new ArrayList<MonitorDO>();
CompletionService<MonitorDO> completionService = new ExecutorCompletionService<MonitorDO>(executorService);
for(int i = 0 ; i < tableNum; i ++) {
final int tableIndex = i;
completionService.submit(new Callable<MonitorDO>() {
@Override
public MonitorDO call() throws Exception {
return getMonitorDO(ipIndex, tableIndex);
}
});
}
for(int i = 0; i < tableNum; i++) {
try {
list.add(completionService.take().get()); #组个取出来
} catch (Exception e) {
log.error("MonitorService | 获得监控数据出错", e);
}
}
return list;
}
判断IP
String dockerIp = null;
try {
dockerIp = InetAddress.getLocalHost().getHostAddress();
String key = DataSourceContextHolder.getDbKey(dockerIp);
DataSourceContextHolder.set(key); #取出来
DataSourceContextHolder
public static Map<String,String> tomcateProperties = new HashMap<String, String>();#IP一对一
private static final ThreadLocal<ShardInfo> contextHolder = new ThreadLocal<ShardInfo>(); #线程本地