通过数据库查询导出报表时,数据库要进行分页查询,分多次生成报表(并非生成多个excel文件或者sheet页,而是追加的形式生成一个sheet页)。
如果未分页,一次查出上万条数据,甚至更高,会长时间占用数据库连接,导致系统并发量下降。另外、由于一次加载数据过多(数据库查询的数据通常会放入到java的一个集合),会长时间占用虚拟机的堆内存,直到生成EXCEL结束,GC才有可能对此集合对象进行回收,这样并发量大时,很容易造成堆内存溢出。在数据库分页查询过程中,每页建议在5000左右,实践证明,生成EXCEL过程,时间主要花费在了数据库查询上,写EXCEL是很快的,所以如果每页条数太小,要查询多次数据库,数据库查询是比较耗时的,这样整体生成EXCEL的时间要长。
如果系统存在大数据量报表导出,则考虑使用POI的SXSSF进行EXCEL操作。
HSSF生成的Excel 97(.xls)格式本身就有每个sheet页不能超过65536条的限制。
XSSF生成Excel 2007 OOXML (.xlsx)格式,条数增加了,但是导出过程中,内存占用率却高于HSSF.
SXSSF是自3.8-beta3版本后,基于XSSF提供的低内存占用的操作EXCEL对象。其原理是可以设置或者手动将内存中的EXCEL行写到硬盘中,这样内存中只保存了少量的EXCEL行进行操作。
导出数据量大,服务器端要对导出的EXCEL进行压缩后,再转成二进制流,响应给浏览器
EXCEL的压缩率特别高,能达到80%,12M的文件压缩后才2M左右。 如果未经过压缩、不仅会占用用户带宽,且会导致负载服务器(apache)和应用服务器之间,长时间占用连接(二进制流转发),导致负载服务器请求阻塞,不能提供服务。
如果应用使用进思的framework-agent.jar,尽量不要使用HSSF对象操作EXCEL
HSSF操作EXCEL对象时,内部会使用一个List集合,存放EXCEL的所有单元格对象,这时就要注意所操作的EXCEL行数*列数,不能超过framework-agent.jar所设置的数量。
一定要注意文件流的关闭
打开一个流文件,不能只想着在正常情况下正常关闭,一定要注意在各种异常情况下,把流文件给关闭,否则很容易造成内存泄露。在关闭流文件时,建议在调用close方法后,再将该文件置为null。因为在使用中发现,在内部对文件流关闭后,再在外围判断该文件流对象是否为空,不为空调用close方法,仍然会被执行。所以为保万无一失,在调用close方法后,在将其设置为Null。
防止前台(页面)连续触发导出EXCEL
导出大数据量的EXCEL,在后台是比较耗时的,也比较耗IO资源,这时应避免用户在等待的过程中,再次触发导出EXCEL操作,所以在触发导出EXCEL后,应将导出按钮置为不可用状态。(一旦触发导出EXCEL,TOMCAT导出EXCEL线程不会因为用户关掉页面或者转向其他页面而停止,会直至整个过程执行完)
导出并发量限制及最大条数限制
导出EXCEL过程,IO操作及循环写入EXCEL比较耗操作系统资源,所以要限制每个实例导出EXCEL的并发数,监控报表并发量限制为15,当超过15时,会给用户提示,引导其重新发起导出EXCEL,这样可能会负载到其他实例,进行导出。
最大条数限制,是根据业务需求,做出合理的设置。导出的EXCEL,如果数据量过大,导出过程中耗时长,占用大量的系统资源,且导出来后,庞大的数据量,打开都比较困难,更不用说查看的意义了。所以要根据用户提供的导出参数,要首先查出数据条数,如果条数过大,直接给用户提示,避免在极端情况或者不正常情况,浪费系统资源。
监控报表通过以上优化、现在导出报表基本稳定、可以支持最大15万条数据导出,不再出现内存溢出、阻塞响应等情况。
如果未分页,一次查出上万条数据,甚至更高,会长时间占用数据库连接,导致系统并发量下降。另外、由于一次加载数据过多(数据库查询的数据通常会放入到java的一个集合),会长时间占用虚拟机的堆内存,直到生成EXCEL结束,GC才有可能对此集合对象进行回收,这样并发量大时,很容易造成堆内存溢出。在数据库分页查询过程中,每页建议在5000左右,实践证明,生成EXCEL过程,时间主要花费在了数据库查询上,写EXCEL是很快的,所以如果每页条数太小,要查询多次数据库,数据库查询是比较耗时的,这样整体生成EXCEL的时间要长。
如果系统存在大数据量报表导出,则考虑使用POI的SXSSF进行EXCEL操作。
HSSF生成的Excel 97(.xls)格式本身就有每个sheet页不能超过65536条的限制。
XSSF生成Excel 2007 OOXML (.xlsx)格式,条数增加了,但是导出过程中,内存占用率却高于HSSF.
SXSSF是自3.8-beta3版本后,基于XSSF提供的低内存占用的操作EXCEL对象。其原理是可以设置或者手动将内存中的EXCEL行写到硬盘中,这样内存中只保存了少量的EXCEL行进行操作。
导出数据量大,服务器端要对导出的EXCEL进行压缩后,再转成二进制流,响应给浏览器
EXCEL的压缩率特别高,能达到80%,12M的文件压缩后才2M左右。 如果未经过压缩、不仅会占用用户带宽,且会导致负载服务器(apache)和应用服务器之间,长时间占用连接(二进制流转发),导致负载服务器请求阻塞,不能提供服务。
如果应用使用进思的framework-agent.jar,尽量不要使用HSSF对象操作EXCEL
HSSF操作EXCEL对象时,内部会使用一个List集合,存放EXCEL的所有单元格对象,这时就要注意所操作的EXCEL行数*列数,不能超过framework-agent.jar所设置的数量。
一定要注意文件流的关闭
打开一个流文件,不能只想着在正常情况下正常关闭,一定要注意在各种异常情况下,把流文件给关闭,否则很容易造成内存泄露。在关闭流文件时,建议在调用close方法后,再将该文件置为null。因为在使用中发现,在内部对文件流关闭后,再在外围判断该文件流对象是否为空,不为空调用close方法,仍然会被执行。所以为保万无一失,在调用close方法后,在将其设置为Null。
防止前台(页面)连续触发导出EXCEL
导出大数据量的EXCEL,在后台是比较耗时的,也比较耗IO资源,这时应避免用户在等待的过程中,再次触发导出EXCEL操作,所以在触发导出EXCEL后,应将导出按钮置为不可用状态。(一旦触发导出EXCEL,TOMCAT导出EXCEL线程不会因为用户关掉页面或者转向其他页面而停止,会直至整个过程执行完)
导出并发量限制及最大条数限制
导出EXCEL过程,IO操作及循环写入EXCEL比较耗操作系统资源,所以要限制每个实例导出EXCEL的并发数,监控报表并发量限制为15,当超过15时,会给用户提示,引导其重新发起导出EXCEL,这样可能会负载到其他实例,进行导出。
最大条数限制,是根据业务需求,做出合理的设置。导出的EXCEL,如果数据量过大,导出过程中耗时长,占用大量的系统资源,且导出来后,庞大的数据量,打开都比较困难,更不用说查看的意义了。所以要根据用户提供的导出参数,要首先查出数据条数,如果条数过大,直接给用户提示,避免在极端情况或者不正常情况,浪费系统资源。
监控报表通过以上优化、现在导出报表基本稳定、可以支持最大15万条数据导出,不再出现内存溢出、阻塞响应等情况。
相关推荐
本教程将详细介绍如何利用Apache POI库来实现使用多个Sheet(工作簿)导出一个Excel文件的功能。 一、Apache POI简介 Apache POI 是一个开源项目,提供API来读取、写入和修改Microsoft Office文件格式,如Word(DOC...
在Java编程中,使用...总结起来,Java使用Apache POI导出大量数据需要考虑内存管理、性能优化、样式设置、错误处理等多个方面。通过合理的编程实践和策略,可以确保数据导出既快速又稳定,同时提供良好的用户体验。
Apache POI 是一个开源项目,专门...总结起来,"poi导出excel需要的jar"是指在Java项目中使用Apache POI库导出Excel文件时,需要确保正确地包含了Apache POI的相关依赖,并且理解如何使用其API来创建、操作Excel文档。
首先,让我们深入理解"struts1"和"poi导出excel"这两个标签。Struts1是Apache软件基金会的一个开源MVC框架,它主要用于构建基于Java的Web应用程序。而Apache POI则是一个用于处理Microsoft Office文档的库,特别是...
Struts2和Apache POI是Java开发中处理Web应用程序数据导出到Excel的常用工具。...以上就是使用Struts2和Apache POI导出数据到Excel的基本流程和关键知识点,实际应用中可能需要根据具体需求进行调整和优化。
这个压缩包“java poi导出导入.zip”显然包含了关于如何使用Java POI进行Excel文件的导入和导出的相关示例或代码。在本文中,我们将深入探讨Java POI在Excel文件操作中的应用。 首先,让我们了解Java POI的基本概念...
在“ poi导出,导出excel文件 ”这个主题中,我们将主要关注XSSF,因为它是现代Excel文件的标准。导出Excel文件的基本步骤如下: 1. **添加依赖**:首先,你需要在你的项目中引入Apache POI的依赖。如果你使用Maven...
1. **内存优化**:当数据量非常大时,建议使用Apache POI提供的SXSSF类来降低内存占用。 2. **性能考虑**:在实际应用中,应尽可能减少对Excel文件的读写操作,避免频繁创建和销毁对象。 3. **异常处理**:在处理...
总结,使用Java和Apache POI导出Excel文件涉及的主要知识点包括: 1. 引入Apache POI依赖 2. 创建Workbook对象(HSSFWorkbook或XSSFWorkbook) 3. 创建Sheet对象 4. 创建Row和Cell对象,设置单元格内容 5. 使用...
在本文中,我们将深入探讨如何使用SpringBoot和Apache POI库来导出指定格式的Excel模板。Apache POI是Java领域广泛使用的库,用于读写Microsoft Office格式的文件,其中包括Excel(.xlsx 和 .xls)文件。SpringBoot...
### POI导入导出及Spring框架综合应用 #### 一、Apache POI简介与核心功能 Apache POI是Apache软件基金会的Jakarta项目中的一个子项目,它为Java程序员提供了一组API,使得他们能够使用Java来操作Microsoft Office...
对于大数据量的导出,需要注意内存管理和效率优化,可以使用SXSSF API来实现流式处理,避免一次性加载整个工作簿到内存。 为了在Eclipse或MyEclipse中运行这个程序,你需要确保已正确配置了Apache POI的依赖,并将...
本篇文章将深入探讨使用Java POI进行数据导出的核心知识点。 1. **Java POI 概述** Java POI 是Apache软件基金会的一个项目,提供了一套API,用于处理Microsoft的文件格式。它支持HSSF(Horizontally Stored File ...
总结起来,`Poi导出Excel工具类`是一个方便的Java库,简化了通过Apache POI处理Excel文件的过程,特别是对于需要导出大量数据和多sheet页的场景。开发者可以轻松地集成到自己的项目中,通过简单的API调用来快速生成...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,尤其是Excel。在Java开发中,POI库被广泛用于读取、写入和...在实际开发中,根据项目需求选择合适的API和组件,优化性能,是使用POI的关键。
在使用Apache POI之前,首先需要将其添加到你的项目依赖中。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.poi <artifactId>poi <version>4.1.2 <groupId>org.apache.poi...
本篇文章将深入探讨如何使用Apache POI来高效地导出大数据到Excel,同时避免内存溢出。 首先,了解内存溢出的问题。当Java程序在运行过程中,如果分配给它的内存不足以存储所有数据,就会抛出`OutOfMemoryError`,...
总结,Apache POI提供了强大的功能,允许开发者根据Excel模板轻松地导出数据。通过读取模板,填充数据,保持模板样式,最后导出文件,可以实现灵活且高效的Excel导出功能。在实际操作中,注意选择合适的Workbook类型...
要使用jXLS和POI导出Excel,你需要以下步骤: 1. **准备模板**:创建一个Excel模板文件,例如`template-simple.xlsx`和`template-matrix-bak.xlsx`,定义好所需的样式、公式和布局。模板中的数据占位符通常用特定的...
在这个实例中,我们将探讨如何使用Apache POI库在Java中实现Excel文件的导入与导出功能。 一、Apache POI简介 Apache POI 提供了Java API,使得开发者能够创建、修改和显示Microsoft Office格式的文件。对于Excel,...