2

我在这里有一个线程来演示 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()

现在的问题是:

  1. 为什么org.apache.commons.digester保留“摘要”jasper 报告组件,甚至当前视图与 Jasper 报告无关?

  2. 仍然非常困惑是碧玉 bean 没有很好地连接还是有什么问题,digester以便保持碧玉报告 bean/模板如此活跃。我尝试节省一些不必要的内存消耗,但我想只关闭日志digester可能不是解决方案,因为它们可能仍在后台运行。

  3. 我非常有信心在 tomcat/vfabbric 上启动应用程序时,jasper 报告在编译时而不是加载时编译。那么为什么看起来“消化器”仍然在努力解析 jasper 模板呢?

提前谢谢了。

4

1 回答 1

2

我在 Spring 上进行单元测试时遇到了同样的问题。要在测试中关闭日志记录,您应该在类路径 (src/test/resources) 中创建一个 logback-test.xml 文件,其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <logger name="org.apache.commons.digester" level="OFF"/>
</configuration>
于 2019-03-21T15:13:00.643 回答