gpt4 book ai didi

java - JasperReports fillReport太慢且耗资源

转载 作者:太空狗 更新时间:2023-10-29 22:45:57 27 4
gpt4 key购买 nike

我发现 JasperReports 在从 Java 应用程序填充报告时确实。程序卡在这一行:

print = JasperFillManager.fillReport(report, parameters, xmlDataSource);

它通常会在那里停留 3 分钟,消耗高达 300Mb 的 RAM 和 50% 的 CPU

  • report 是一个使用 3 个子报告的编译 (.jasper) 报告。
  • 数据源是一个相当大的 XML 文件(大约 10 万行,1.5Mb)
  • 机器是 3Ghz 双核,4Gb 内存

那么,我怎样才能提高报表填充性能呢?

最佳答案

问题

看来是XPath引擎的问题。即,解析 XML 文件以查找数据的库。

iReport Designer 使用 Jaxen,而 JasperReport 使用 Xalan。与 Jaxen 相比,Xalan 真的很慢(真的很慢)。

这就是为什么只有在从 Java 应用程序而不是 iReports 填充报表时才会出现问题。

解决方案

好吧,解决方案很简单, 只需在您的 Java 应用程序中添加以下行以选择 Jaxen 库而不是默认的 Xalan 库(它已被弃用,但它可以工作):

罢工>
JRProperties.setProperty("net.sf.jasperreports.xpath.executer.factory",
"net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

<罢工>

编辑:该行已弃用,我找到了设置属性的正确方法:

DefaultJasperReportsContext context = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil.getInstance(context).setProperty("net.sf.jasperreports.xpath.executer.factory",
"net.sf.jasperreports.engine.util.xml.JaxenXPathExecuterFactory");

您还需要将 Jaxen .jar 添加到您的构建路径中。这是一个链接:https://mvnrepository.com/artifact/jaxen/jaxen


虽然使用 Xalan 需要 3-5 分钟填写报告,但现在使用 Jaxen 只需几秒钟即可完成。

答案在这里找到:http://community.jaspersoft.com/questions/536842/jasperreports-too-slow
还有这里:http://community.jaspersoft.com/wiki/xml-data-source-very-slow-parse

关于java - JasperReports fillReport太慢且耗资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875199/

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