Java JasperReports-处理从数据库到PDF的大数据

Java JasperReports-处理从数据库到PDF的大数据,java,performance,io,jasper-reports,Java,Performance,Io,Jasper Reports,我有一个报告,需要一个select,它返回我大约900k条记录(大约100MB的数据),我需要用它创建一个PDF 因此,我的实现很简单:我从JDBC查询中获取数据,放入ArrayList并将其传递给我的报告。我在内存方面有一些问题,但我已经解决了,我现在的问题是CPU处理(总是100%)导致我的进程崩溃 我的代码非常简单: public OutputStream getOutputStream(OutputStream out) { try { Jasp

我有一个报告,需要一个select,它返回我大约900k条记录(大约100MB的数据),我需要用它创建一个PDF

因此,我的实现很简单:我从JDBC查询中获取数据,放入
ArrayList
并将其传递给我的报告。我在内存方面有一些问题,但我已经解决了,我现在的问题是CPU处理(总是100%)导致我的进程崩溃

我的代码非常简单:

 public OutputStream getOutputStream(OutputStream out) {
        try {
            JasperPrint print = JasperFillManager.fillReport(jasperName, params, fillList);
            JRExporter exporter = format.getExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
            exporter.exportReport();

        } catch (Exception e) {
            throw new RuntimeException("Error getting the stream", e);
        }
        return out;
    }
我想知道:

  • 在这种情况下,我如何使用我的CPU的多核
  • 有没有其他策略可以做到这一点

    • 我建议两件事。 1.尝试从JasperReport本身启动查询,而不是将其存储在Arraylist中,然后将其传递给report

      2.使用报告虚拟机。根据需要,您可以使用交换虚拟机或Gzip虚拟机。Jasper声称Gzip虚拟机将Jasper对象压缩到原始Jasper对象的十分之一


      无论您的数据有多大,Virtualizer都将确保始终使用Virtualizer生成报告。我个人使用GZip虚拟机打印了超过25000份超过500MB大小的报告,以确保它确实正常工作。

      当你说你的CPU总是在100%时,你是说所有的核心都在100%吗?就一个?你说的撞车是什么意思?你有什么堆栈跟踪之类的吗。如果是这样的话,将其包括在内可能是有用的。