java处理百万数据,最简单明了的写法

注意分割需要引用爪哇pom

<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
/**
 * 新增项目通道网络
 */
@PostMapping("/rouPathNetWorkAddBatch")
public AjaxResult rouPathNetWorkAddBatch(@RequestBody List<PrjRoutingpathNetwork> rouTingPathNetworkList) throws ExecutionException, InterruptedException {

    //按1000条分割
    List<List<PrjRoutingpathNetwork>> networkList = ListUtils.partition(rouTingPathNetworkList, 1000);
    //获取线程池中的@bean
    ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
    //倒计数器,networkList.size是锁数量也是   线程数量
    CountDownLatch latch = new CountDownLatch(networkList.size());
    try{
        for (List<PrjRoutingpathNetwork> n : networkList) {
            //每次循环创建一个线程 new Runnable()
            executor.execute(new Runnable() {
                @Override
                public void run() {
                    //执行任务
                    prjRoutingpathNetworkService.insertPrjRoutingpathNetworks(n);
                    //去掉一把锁
                    latch.countDown();
                }
            });
        }
        //校验锁数量是否为0,(还有没有)
        latch.await();
    }catch (Exception e){
        return AjaxResult.error("导入出现错误");
    }
    return toAjax(1);
}
经验分享 程序员 微信小程序 职场和发展