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); }
下一篇:
Java实习生找工作需要注意的几点