gpt4 book ai didi

java - 如何只编译一次.jrxml

转载 作者:行者123 更新时间:2023-11-30 09:27:05 25 4
gpt4 key购买 nike

请帮助:.jrxml 每次我生成报告时都在编译。我只想编译一次。请帮助我需要添加什么条件。我没有使用输入/输出流。用 compileReport 可以做什么只编译一次。

最佳答案

不要让您的 JRXML 文件在任何可访问 Web 的地方可用。 JRXML 文件包含易于阅读的 SQL 语句,这些语句泄露了:

  • 数据库供应商
  • 数据库结构

恶意用户可以将此信息用于恶意目的。我倾向于将 SQL 语句移动到数据库 View 或存储过程中,这会隐藏很多信息。

您的报告创建过程应如下所示:

  1. 与业务分析师交谈以确定所有报告的报告要求。
  2. 合并所有简单变化的报告(例如,不同的列或排序顺序)。
  3. 为每个报告创建 JRXML 文件(一个 JRXML 文件可以处理多个报告变体),将 JRXML 文件存储在源代码存储库中。
  4. 编译JRXML文件得到.jasper文件。
  5. 将编译后的 .jasper 文件存储在存储库和 Web 服务器上。
  6. 从您的源代码中完全删除编译步骤。

简而言之,编制报告是您应该在应用程序环境之外进行的过程。这是开发人员应该采取的步骤。开发人员将编译报告 checkin 存储库,测试/构建环境可以获取最新副本。

除非您绝对需要即时编译报告。请注意,除非您正在创建动态报告,否则即时编译报告没有任何意义。在这种情况下,你会想要使用像 DynamicJasper 这样的东西。 .

综上所述,您的问题的答案是:

  1. 尝试获取 Sample_Report.jasper 的源代码。
  2. 如果 Sample_Report.jasper 资源不存在,则按照您所显示的进行编译。
  3. 如果资源确实存在,则避免编译步骤。

这可能类似于:

JasperReport jasReport = null;

try {
jasReport = (JasperReport)JRLoader.loadObject(
getResourceAsStream("Sample_Report.jasper")
);
}
catch( Exception e ) {
jasperReport = JasperCompileManager.compileReport(
getResourceAsStream("Sample_Report.jrxml")
);
}

您必须确保正确的目录和文件可以加载,如果它们确实存在于这些位置。您还必须在编译后保存编译报告,以便下一次迭代将选择 .jasper 文件。

要保存编译好的.jasper文件,可以使用下面的API :

JasperCompileManager.compileReportToStrem(input, output);

另见:

关于java - 如何只编译一次.jrxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738332/

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