gpt4 book ai didi

java - Jasper 报告内存不足问题

转载 作者:行者123 更新时间:2023-12-02 12:22:59 30 4
gpt4 key购买 nike

我试图通过从数据库获取数据并将 pojo 集合列表传递给 JRBeanCollectionDataSource 来生成 Excel 报告。尝试生成包含 5000 条记录和 8 个字段的 Excel,出现内存不足问题。

我尝试了 JRFileVirtualizer 但没有运气,任何人都可以帮助我摆脱这个 OutOfMemory 问题。下面是我的代码

public class JasperReport  {

public static void main(String [] args) throws Exception{
DBtoExcelDownloadDAO d = new DBtoExcelDownloadDAO();
List<ExcelDownloadPojo> results=d.getDBrecordsForDownload(168);

net.sf.jasperreports.engine.JasperReport jasperReport = JasperCompileManager
.compileReport("C:\\Users\\vkode200\\Networksolve_Report.jrxml");

String outputFileName = "C:\\Users\\vkode200\\Downloads\\Output\\person.xls";
JRFileVirtualizer virtualizer = new JRFileVirtualizer(1, "C:\\Users\\vkode200\\Reports");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, (Map) getParameters(virtualizer),
new JRBeanCollectionDataSource(
findReportData(results),false));
JRXlsExporter exporterXls = new JRXlsExporter();

exporterXls.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporterXls.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME, outputFileName);

exporterXls.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.TRUE);
exporterXls.exportReport();
}

private static Collection findReportData(List<ExcelDownloadPojo> results) throws FileNotFoundException, IOException {
List<JasperPojo> list = SampleExcel.generateExcel(results);
return list;
}

private static Object getParameters(JRFileVirtualizer virtualizer ) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("footerText", "Just to demonstrate how to pass parameters to report");
params.put("Title", "NETWORK_SOLVE");
params.put(JRParameter.REPORT_VIRTUALIZER,virtualizer);
return params;
}
}
<小时/>

错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWork‌​book.java:1393) at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkboo‌​k.java:1292)

最佳答案

如果您无法减少数据量,那么您应该增加应用程序分配的堆以防止异常。由于我不知道您的应用程序是如何工作的,因此有一些方法可以解决此问题:

<小时/>

命令

可以使用命令行选项增加分配给 JVM 的堆大小

-Xms<size>        set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size

java -Xms256m -Xmx2048m ClassName
<小时/>

NetBeans

右键单击项目 -> 属性 -> 运行

Project properties

<小时/>

Tomcat

setenv.shsetenv.bat 在启动时执行。如果 $CATALINA_HOME/bin/

中不存在该文件,则创建该文件

对于 Linux,创建 setenv.sh 并添加

export JAVA_OPTS="-server -Xmx2048m"

对于 Windows,创建 setenv.bat 并添加

set JAVA_OPTS=-server -Xmx2048m

根据您的需要更改 Xmx 值。

关于java - Jasper 报告内存不足问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638279/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com