Please Help: .jrxml is compiling every time i generate the report. I want to compile it only once. please help me what condition should i need to add. i am not using input/output stream. with compileReport what can be done to compile only once.
问问题
5770 次
1 回答
3
不要让您的 JRXML 文件在任何可通过网络访问的地方都可用。JRXML 文件包含易于阅读的 SQL 语句,其中包含:
- 数据库供应商
- 数据库结构
恶意用户可以将这些信息用于不法目的。我倾向于将 SQL 语句移动到数据库视图或存储过程中,这隐藏了很多信息。
您的报告创建过程应如下所示:
- 与业务分析师交谈以确定所有报告的报告要求。
- 合并所有简单变化的报告(例如,不同的列或排序顺序)。
- 为每个报告创建 JRXML 文件(一个 JRXML 文件可以处理多个报告变体),将 JRXML 文件存储在源代码存储库中。
- 编译 JRXML 文件以获取
.jasper
文件。 - 将编译
.jasper
后的文件存储在存储库和 Web 服务器上。 - 完全从源代码中删除编译步骤。
简而言之,编译报告是一个你应该在应用程序环境之外进行的过程。这是开发人员应该采取的步骤。开发人员将编译后的报告检查到存储库中,测试/构建环境可以获取最新的副本。
除非您绝对需要即时编译报告。请注意,除非您正在创建动态报告,否则即时编译报告并没有真正意义。在这种情况下,您需要使用DynamicJasper 之类的东西。
说了这么多,你的问题的答案是这样的:
- 尝试获取
Sample_Report.jasper
. - 如果
Sample_Report.jasper
资源不存在,则按照您显示的方式进行编译。 - 如果资源确实存在,请避免编译步骤。
这可能类似于:
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);
也可以看看:
于 2013-02-06T21:10:46.713 回答