一、使用阿里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批量导入相关推荐

  1. excel批量导入数据

    这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下: excel进行批量导入数据,结合struts2+ajax 导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图, ...

  2. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  3. Java实现Excel批量导入数据库

    springboot实现Excel批量导入数据库 前言:项目开发中最容易碰到的需求即将Excel数据批量上传到数据库中存储 -> Java实现,Excel数据表,MySQL数据库,具体步骤如下- ...

  4. Excel 批量导入

    目录标题 1.最终的效果图 2.开发步骤 2.1 环境配置 2.2 POM 文件的引入 2.3 web开发 2.4 服务端开发 1.最终的效果图 2.开发步骤 2.1 环境配置 环境 版本 Eclip ...

  5. excel宏转txt替换强制换行符_三个步骤学会用EXCEL批量导入anki题库

    Anki真的是个好用到不想推荐给朋友的软件,本人最近准备刷个新题库,找了一上午找不到原来教我EXCEL导入anki的网页,为了防止我自己过段时间又忘了应该怎么导入,我写了这个教程,写都写了,就顺手发出 ...

  6. 订餐系统之Excel批量导入

    批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...

  7. php批量添加excel数据库表,php 把excel批量导入到数据库代码

    php 把excel批量导入到数据库代码 我们是利用了ExcelFileParser这个扩展来处理的哦, Excel数据获取演示 Excel数据获取演示 /** * CopyRight (c) 200 ...

  8. 高性能 + 百万级excel数据导入导出

    高性能 + 百万级excel数据导入导出 内容介绍 github地址 使用文档地址 安装注意事项 仅以mac举例 ide中提示相关代码 下载demo 内容介绍 [转载]https://learnku. ...

  9. SpringMVC框架通过Excel批量导入数据

    文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...

最新文章

  1. k2677场效应管参数引脚_常用功率场效应管参数大全
  2. isinstance函数和@staticmethod用法
  3. Delphi中uses在interfeace和implementation中的区别
  4. 准备入门IC的全局观念系列-上
  5. js前台编码,asp.net后台解码 防止前台传值到后台为乱码
  6. 我个人的CRUD故事-或我如何来到CUBA平台
  7. Error running ‘xxx‘: Command line is too long. Shorten command line for xxx or also for Spring Boot
  8. mysql sql select for update_mysql SELECT FOR UPDATE语句使用示例
  9. Python计算机视觉编程pdf
  10. 计算机考研专业课卷子,考研统考专业课有哪些?题型都有什么?你了解吗
  11. Java程序设计基础笔记 • 【第1章 初识Java】
  12. (实用)网页在线QQ客服咨询html代码
  13. TRUNK 的介绍和配置
  14. 独家访谈N位品牌操盘手:深度揭秘品牌自播方法论
  15. maven 问题解决(Failed to look for file: http://)
  16. 算法系列之十八:用天文方法计算二十四节气(下)
  17. 基于EGE的双人象棋
  18. 【全文翻译】Composite Adversarial Attacks
  19. 基于React + Antd 实现的斗兽棋web应用
  20. VB.NET学习笔记:操作数据集DataSet中DataTable数据行(DataRow)——新增、插入、复制、克隆

热门文章

  1. 【PCI】PCI PCIE基础(一)
  2. 长春理工大学计算机科学与技术就业情况,2021年长春理工大学专业排行榜,哪个专业就业比较好...
  3. 华为云早报 “会思考”的红绿灯来了!
  4. 数据压缩导论--叨叨
  5. 关于PHP中的webshell
  6. 如何在拼多多上卖虚拟商品 新手在拼多多开店卖虚拟商品
  7. Windows 7下配置Lex和Yacc
  8. 递归思想解决下楼梯问题
  9. 2023-2028年中国高纯度糖精市场运营模式分析及发展趋势研究报告
  10. 基于PHP+MySQL珠宝销售网站的设计与开发