Java使用POI导出大数据量Excel的方法

 更新时间:2019年11月22日 09:52:59   作者:小小小LIN子  
今天需要写一个导出的Excel的功能,但是发现当数据量到3万条时,列数在23列时,内存溢出,CPU使用100%,测试环境直接炸掉。小编给大家分享基于java使用POI导出大数据量Excel的方法,感兴趣的朋友一起看看吧

今天需要写一个导出的Excel的功能,但是发现当数据量到3万条时,列数在23列时,内存溢出,CPU使用100%,测试环境直接炸掉。在本地测试时发现,导出3000条左右的数据的时候,堆内存瞬间升高500M左右。然后发现了 SXSSFWorkbook 这个类。

简介

SXSSFWorkbook 需要 poi-ooxml 包 3.8 及以上开始支持,我这边适使用的是 3.9 版本,本质是一个 XSSFWorkbook 类( Excel2007 ),它使用的方式是采用 硬盘空间 来大幅降低 堆内存 的占用,在系统的临时文件夹目录创建一个临时文件,然后将所有大于约定行数的数据都存入临时文件,而不是全部放在内存中,内存中只存放 最新的 的约定条数的数据,从而实现以硬盘空间换取内存空间,避免内存溢出

使用方式

与正常的Excel导出方法没有区别,只是将实例化的类换为 SXSSFWorkbook

SXSSFWorkbook workbook = null;
  OutputStream outputStream = null;
  try {
  outputStream = response.getOutputStream();
  //创建工作簿
  workbook = new SXSSFWorkbook();
  // 打开压缩功能 防止占用过多磁盘
  workbook.setCompressTempFiles(true);
  // 创建一个工作表
  Sheet sheet = workbook.createSheet("表名");
  // 创建一行
  Row titleRow = sheet.createRow(0);
  // 创建一个单元格
  Cell cell = titleRow.createCell(0);
  // 给单元格赋值
  cell.setCellValue("内容");
  // 将工作簿写入输出流
  workbook.write(outputStream);
  } catch (Exception e) {
  e.printStackTrace();
  }finally {
  if (workbook != null) {
   //使用完毕后将产生的临时文件删除 防止将磁盘搞满
   workbook.dispose();
  }
  if (outputStream != null) {
   outputStream.close();
   
  }
  }

总结

以上所述是小编给大家介绍的Java使用POI导出大数据量Excel的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 浅谈Java中的分布式锁

    浅谈Java中的分布式锁

    这篇文章主要介绍了浅谈Java中的分布式锁,为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制,需要的朋友可以参考下
    2023-09-09
  • 深入了解Java包与访问控制权限

    深入了解Java包与访问控制权限

    这篇文章主要带你掌握Java中包的定义及使用以及Java中的4种访问权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • Java利用JavaCPP调用算法示例

    Java利用JavaCPP调用算法示例

    本文主要介绍了Java利用JavaCPP调用算法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作

    Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作

    这篇文章主要介绍了Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作,需要的朋友可以参考下
    2017-09-09
  • Java数据结构彻底理解关于KMP算法

    Java数据结构彻底理解关于KMP算法

    这篇文章主要介绍了Java数据结构关于KMP算法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java中的Map集合根据key值排序的实现

    Java中的Map集合根据key值排序的实现

    本文主要介绍了Java中的Map集合如何根据key值排序,包含使用TreeMap和使用lambda表达式和Stream流两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Gson中@JsonAdater注解的几种方式总结

    Gson中@JsonAdater注解的几种方式总结

    这篇文章主要介绍了Gson中@JsonAdater注解的几种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • mybatis使用pageHelper插件进行查询分页

    mybatis使用pageHelper插件进行查询分页

    这篇文章主要介绍了mybatis使用pageHelper插件进行查询分页,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 如何在Spring Boot启动时运行定制的代码

    如何在Spring Boot启动时运行定制的代码

    在本文中您将学习如何挂钩应用程序引导程序生命周期并在Spring Boot启动时执行代码。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • SpringCloud网关Gateway架构解析

    SpringCloud网关Gateway架构解析

    这篇文章主要介绍了SpringCloud网关Gateway架构解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论