调用分页接口使用多线程插入数据库
public Object insert() throws Exception {
Map mapResult = restTemplate.getForObject("http://127.0.0.1:8088/msg", Map.class);
//返回类型
// {"currentPage":1,"totalPage":1573,"dataList":[{}]}
String totalPage = mapResult.get("totalPage").toString();//获取总页数
Integer pageData = 50;//每个线程处理的数据页数
Integer totleThread = Integer.parseInt(totalPage) / pageData;//共要多少个线程
if (Integer.parseInt(totalPage) % pageData > 0) {
totleThread = totleThread + 1;
}
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();//创建线程池
long start = System.currentTimeMillis();
for (int i = 1; i <= totleThread; i++) {
Integer k = i;
Integer t= Integer.parseInt(totalPage);
Integer p = pageData;
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
for (int j = (k-1)*p; j < p*k; j++) {
if (j == 0){
j=1;
}
if(j > t){
return;
}
Map map = restTemplate.getForObject("http://127.0.0.1:8088/msg?currentPage="+j, Map.class);
List<Map> list = (List) map.get("dataList");
try {
testServives.insert_GSXX(list);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程"+Thread.currentThread().getName()+"完成插入第"+j+"页数据");
}
}
});
}
cachedThreadPool.shutdown();
while (!cachedThreadPool.isTerminated()) {
// pass
}
System.out.println("all tasks have been done in " + (System.currentTimeMillis() - start) + "ms");
log.info("程序处理完成,线程池全部关闭");
return setResultSuccess("插入完成");
}