调用分页接口使用多线程插入数据库

调用分页接口使用多线程插入数据库

  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("插入完成");

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值