10万行级excel批量导入
一、使用阿里easyExcel
easyExcel相较于Apache poi,避免了Apache poi一定程度上导致OOM问题或者频繁full gc
easyExcel,64M内存1分钟内读取75M(46W行25列)的Excel
easyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析
二、优化插入速度
使用了 values 批量插入代替逐行插入,每1000条插入
给一个工具类用于拆分List集合
/*** 讲一个List的集合分割成多个用于批量处理** @param source 总量集合* @param n 分成几份* @param <T> 泛型* @return 分割后的子集合*/public static <T> List<List<T>> averageAssignList(List<T> source, int n) {List<List<T>> result = new ArrayList<List<T>>();int remainder = source.size() % n; //(先计算出余数)int number = source.size() / n; //然后是商int offset = 0;//偏移量for (int i = 0; i < n; i++) {List<T> value = null;if (remainder > 0) {value = source.subList(i * number + offset, (i + 1) * number + offset + 1);remainder--;offset++;} else {value = source.subList(i * number + offset, (i + 1) * number + offset);}result.add(value);}return result;}
三、使用自定义线程池
核心线程数10,服务器为8核,io密集型,LinkedBlockingQueue
这里使用了并发工具类CountDownLatch,避免了多线程任务丢失的问题,countDownLatch大小为差费后的list数量,线程池执行一个任务,countDownLatch数量减1,await直到countDownLatch数量减少为0,线程池关闭
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10,20,5, TimeUnit.SECONDS,new LinkedBlockingQueue<>(lists.size()), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());CountDownLatch latch = new CountDownLatch(lists.size());lists.forEach(childList -> {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {// 单个插入方法} catch (Exception e) {e.printStackTrace();}latch.countDown();}});threadPoolExecutor.execute(thread);});try {latch.await();} catch (InterruptedException e) {log.error(e.getMessage(), e);}threadPoolExecutor.shutdown();
优化结果:20多万行数据录入数据库用了55秒
10万行级excel批量导入相关推荐
- excel批量导入数据
这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下: excel进行批量导入数据,结合struts2+ajax 导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图, ...
- 【转帖】Java实现Excel批量导入数据
这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...
- Java实现Excel批量导入数据库
springboot实现Excel批量导入数据库 前言:项目开发中最容易碰到的需求即将Excel数据批量上传到数据库中存储 -> Java实现,Excel数据表,MySQL数据库,具体步骤如下- ...
- Excel 批量导入
目录标题 1.最终的效果图 2.开发步骤 2.1 环境配置 2.2 POM 文件的引入 2.3 web开发 2.4 服务端开发 1.最终的效果图 2.开发步骤 2.1 环境配置 环境 版本 Eclip ...
- excel宏转txt替换强制换行符_三个步骤学会用EXCEL批量导入anki题库
Anki真的是个好用到不想推荐给朋友的软件,本人最近准备刷个新题库,找了一上午找不到原来教我EXCEL导入anki的网页,为了防止我自己过段时间又忘了应该怎么导入,我写了这个教程,写都写了,就顺手发出 ...
- 订餐系统之Excel批量导入
批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...
- php批量添加excel数据库表,php 把excel批量导入到数据库代码
php 把excel批量导入到数据库代码 我们是利用了ExcelFileParser这个扩展来处理的哦, Excel数据获取演示 Excel数据获取演示 /** * CopyRight (c) 200 ...
- 高性能 + 百万级excel数据导入导出
高性能 + 百万级excel数据导入导出 内容介绍 github地址 使用文档地址 安装注意事项 仅以mac举例 ide中提示相关代码 下载demo 内容介绍 [转载]https://learnku. ...
- SpringMVC框架通过Excel批量导入数据
文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...
最新文章
- k2677场效应管参数引脚_常用功率场效应管参数大全
- isinstance函数和@staticmethod用法
- Delphi中uses在interfeace和implementation中的区别
- 准备入门IC的全局观念系列-上
- js前台编码,asp.net后台解码 防止前台传值到后台为乱码
- 我个人的CRUD故事-或我如何来到CUBA平台
- Error running ‘xxx‘: Command line is too long. Shorten command line for xxx or also for Spring Boot
- mysql sql select for update_mysql SELECT FOR UPDATE语句使用示例
- Python计算机视觉编程pdf
- 计算机考研专业课卷子,考研统考专业课有哪些?题型都有什么?你了解吗
- Java程序设计基础笔记 • 【第1章 初识Java】
- (实用)网页在线QQ客服咨询html代码
- TRUNK 的介绍和配置
- 独家访谈N位品牌操盘手:深度揭秘品牌自播方法论
- maven 问题解决(Failed to look for file: http://)
- 算法系列之十八:用天文方法计算二十四节气(下)
- 基于EGE的双人象棋
- 【全文翻译】Composite Adversarial Attacks
- 基于React + Antd 实现的斗兽棋web应用
- VB.NET学习笔记:操作数据集DataSet中DataTable数据行(DataRow)——新增、插入、复制、克隆