我在这里有一个线程来演示 Spring 中的当前问题与 Jasper 报告。在 SO 的所有天才的帮助下,我已经解决了大部分问题,但仍然坚持解决花费在org.apache.commons.digester
.
这种情况在连接 jasper 报告 bean 时很常见,如果我们打开调试日志模式,会有大量来自org.apache.commons.digester.Digiester.sax
,的日志信息EVEN CURRENT PAGE HAS NOTHING TO DO WITH JASPER REPORT
。所以在我看来,jasper bean 的连线不好,所以当应用程序运行时,容器一直试图帮助 bean 连线。
这是运行时的一些正常日志(当视图上没有 jasper 报告时发生),说明 tld jar 混淆,但应用程序仍然可以继续运行。
Oct 17, 2012 3:42:27 PM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
这是applicationContext配置文件中的bean,这是一个很常见的bean
<bean id="pdfStandard" class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView">
<property name="url" value="classpath:/META-INF/jasperReports/pdf_stardard.jrxml" />
<property name="reportDataKey" value="datasource" />
<property name="headers">
<props>
<prop key="Content-Disposition">attachment; filename=standard.pdf</prop>
</props>
</property>
</bean>
这是调试级别的千兆字节日志文件的一小部分looks like it is parsing the template all the time without a rest
,或者尝试从 jasper 库解析 XML?
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- startElement(http://jasperreports.sourceforge.net/jasperreports,textElement,textElement)
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- Pushing body text ''
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- New match='jasperReport/summary/band/textField/textElement'
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- Fire begin() for FactoryCreateRule[className=net.sf.jasperreports.engine.xml.JRTextElementFactory, attributeName=null, creationFactory=net.sf.jasperreports.engine.xml.JRTextElementFactory@12dc6007]
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester -- [FactoryCreateRule]{jasperReport/summary/band/textField/textElement} New net.sf.jasperreports.engine.design.JRDesignTextField
2012-10-17 15:29:12,025 -- DEBUG -- org.apache.commons.digester.Digester.sax -- ignorableWhitespace()
现在的问题是:
为什么
org.apache.commons.digester
保留“摘要”jasper 报告组件,甚至当前视图与 Jasper 报告无关?仍然非常困惑是碧玉 bean 没有很好地连接还是有什么问题,
digester
以便保持碧玉报告 bean/模板如此活跃。我尝试节省一些不必要的内存消耗,但我想只关闭日志digester
可能不是解决方案,因为它们可能仍在后台运行。我非常有信心在 tomcat/vfabbric 上启动应用程序时,jasper 报告在编译时而不是加载时编译。那么为什么看起来“消化器”仍然在努力解析 jasper 模板呢?
提前谢谢了。