Java JasperReport 非常慢

标签 java performance jasper-reports

我正在尝试创建一个 JasperReport。但执行“JasperFillManager.fillReport()”大约需要10秒。有人知道为什么需要这么长时间吗?

public JasperViewer createReport(Long termin_id) {
    String reportSource = getClass().getResource("/reports/example.jrxml").getPath();
    parameters = new HashMap<String, Object>();
    parameters.put("Terminnummer", termin_id);
    try {
        JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
        Connection c = MySQL.getNativeConnection();
        JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, c); 
        jv = new JasperViewer(print, false);
        });
    } catch (JRException ex) {
        System.out.println(ex.getMessage());
    }
    return jv;

感谢您的帮助。

这是我用于此报告的 jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="repTermin" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
        <property name="ireport.zoom" value="1.0"/>
        <property name="ireport.x" value="0"/>
        <property name="ireport.y" value="0"/>
        <style name="Crosstab Data Text" hAlign="Center"/>
        <parameter name="Terminnummer" class="java.lang.Long"/>
        <parameter name="Bearbeiter" class="java.lang.String"/>
        <parameter name="Teilnehmer" class="java.lang.String"/>
        <queryString>
                <![CDATA[SELECT t.*, a.AKTENZEICHENJAHR, a.AKTENZEICHENNUMMER, a.GRUND, a.BEZEICHNUNG, b.`NAME` AS ANLEGER, b2.`NAME` AS MITARBEITER
FROM demo.TERMIN t, demo.AKTE a, demo.BENUTZER b, demo.BENUTZER b2
WHERE t.ID = $P{Terminnummer} AND b.ID = t.ANLEGER_ID AND a.ID = t.AKTE_ID AND b2.ID = t.MITARBEITER_ID]]>
        </queryString>
        <field name="ID" class="java.lang.Long"/>
        <field name="ART" class="java.lang.String"/>
        <field name="BEMERKUNG" class="java.lang.String"/>
        <field name="BESCHREIBUNG" class="java.lang.String"/>
        <field name="DATUM" class="java.lang.Long"/>
        <field name="DAUER" class="java.lang.Long"/>
        <field name="ERSTELLT" class="java.lang.Long"/>
        <field name="NOTIZEN" class="java.lang.String"/>
        <field name="ORT" class="java.lang.String"/>
        <field name="PRIVAT" class="java.lang.Boolean"/>
        <field name="STATUS" class="java.lang.String"/>
        <field name="AKTE_ID" class="java.lang.Long"/>
        <field name="ANLEGER_ID" class="java.lang.Long"/>
        <field name="MITARBEITER_ID" class="java.lang.Long"/>
        <field name="PERSON_ID" class="java.lang.Long"/>
        <field name="AKTENZEICHENJAHR" class="java.lang.String"/>
        <field name="AKTENZEICHENNUMMER" class="java.lang.String"/>
        <field name="GRUND" class="java.lang.String"/>
        <field name="BEZEICHNUNG" class="java.lang.String"/>
        <field name="ANLEGER" class="java.lang.String"/>
        <field name="MITARBEITER" class="java.lang.String"/>
        <background>
                <band splitType="Stretch"/>
        </background>
        <title>
                <band height="146" splitType="Stretch">
                        <textField pattern="">
                                <reportElement x="0" y="100" width="555" height="20" backcolor="#CCCCCC"/>
                                <textElement textAlignment="Center">
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{ART}.toString()+" am "+new java.text.SimpleDateFormat("dd.MM.yyyy").format(new Date($F{DATUM}))+" ("+new java.text.SimpleDateFormat("EEEEE").format(new Date($F{DATUM}))+") um "+new java.text.SimpleDateFormat("HH:mm").format(new Date($F{DATUM}))+" Uhr"]]></textFieldExpression>
                        </textField>
                </band>
        </title>
        <pageHeader>
                <band height="6" splitType="Stretch">
                        <line>
                                <reportElement x="0" y="0" width="555" height="1"/>
                                <graphicElement>
                                        <pen lineWidth="3.0"/>
                                </graphicElement>
                        </line>
                </band>
        </pageHeader>
        <columnHeader>
                <band height="6" splitType="Stretch"/>
        </columnHeader>
        <detail>
                <band height="472" splitType="Stretch">
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="0" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Akten und Aktenzeichen]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="18" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Bearbeiter der Akte]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="36" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Termin bestimmt für]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="66" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[weitere Teilnehmer]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="202" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Bemerkung]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="231" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Datum]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="249" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Uhrzeit]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="267" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Dauer]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="285" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Ort des Termins]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="332" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Termin notiert am]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="314" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Termin notiert von]]></text>
                        </staticText>
                        <staticText>
                                <reportElement mode="Opaque" x="0" y="363" width="219" height="18" backcolor="#CCCCCC"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Notizen]]></text>
                        </staticText>
                        <textField>
                                <reportElement x="240" y="0" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{AKTENZEICHENJAHR}+" - "+$F{AKTENZEICHENNUMMER}+" "+$F{GRUND}]]></textFieldExpression>
                        </textField>
                        <textField isBlankWhenNull="true">
                                <reportElement x="240" y="18" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$P{Bearbeiter}]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="36" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{MITARBEITER}]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="202" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{BEMERKUNG}]]></textFieldExpression>
                        </textField>
                        <textField isBlankWhenNull="true">
                                <reportElement x="240" y="231" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("dd.MMMM yyyy").format(new Date($F{DATUM}))]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="249" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("HH:mm").format(new Date($F{DATUM}))]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="267" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("HH").format(new Date($F{DAUER}))+"h "+new java.text.SimpleDateFormat("mm").format(new Date($F{DAUER}))+" min"]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="285" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{ORT}]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="314" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{ANLEGER}]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="332" width="315" height="18"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[new java.text.SimpleDateFormat("dd.MMMM yyyy, HH:mm").format(new Date($F{ERSTELLT}))]]></textFieldExpression>
                        </textField>
                        <textField>
                                <reportElement x="240" y="363" width="315" height="85"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{NOTIZEN}]]></textFieldExpression>
                        </textField>
                        <textField isBlankWhenNull="true">
                                <reportElement x="240" y="66" width="315" height="114"/>
                                <textElement>
                                        <font fontName="Tahoma" size="14"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$P{Teilnehmer}]]></textFieldExpression>
                        </textField>
                </band>
        </detail>
        <columnFooter>
                <band height="45" splitType="Stretch"/>
        </columnFooter>
        <pageFooter>
                <band height="54" splitType="Stretch"/>
        </pageFooter>
        <summary>
                <band height="42" splitType="Stretch"/>
        </summary>
</jasperReport>

最佳答案

假设您的报告使用 SQL 查询来获取数据,您是否测试过 SQL 查询运行需要多长时间?

另一个问题是您在查询中返回了多少数据?越多,显然需要的时间就越长。

此外,您每次运行时都会重新编译报告。虽然这可能不是您的阻碍,但您可以使用报告的缓存版本。

本质上:

  • 检查是否在缓存中
    • 如果没有编译
  • 获取编译后的 jasper 文件

您可以使用 JasperCompileManager.compileReportToStream(inputStream, outputStream); 将其编译为文件,其中输出流是 FileOutputStream;

关于Java JasperReport 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9604611/

相关文章:

java - iReport/jasperReports 如果节点存在,我如何检查 xml 数据源

jasper-reports - jasper 文本字段被截断

java - 在 arraylist 中设置元素也更新其他元素

java - POI 将单元格背景设置为自定义颜色

java - Tomcat JDBC 连接池问题 : "Statement is closed"

java - 我们如何在 swing 应用程序中使用 java 实现 .xml 文件?

javascript - 如果正则表达式中 $ 之后出现字符,性能会降低

sql-server - 为什么我的执行计划中出现了排序?

database - SSIS Excel 数据提取

java - 无法初始化类 net.sf.jasperreports.charts.type.PlotOrientationEnum