gpt4 book ai didi

java - Jasper with Spring——来自 org.apache.commons.digester 的大量日志

转载 作者:行者123 更新时间:2023-11-30 11:39:47 26 4
gpt4 key购买 nike

我有一个线程 here用 Jasper 报告演示 Spring 中的当前问题。在来自 SO 的所有天才的帮助下,我已经解决了大部分问题,但仍然坚持解决花费在 org.apache.commons.digester 上的内存。

连接 jasper 报告 bean 时这种情况很常见,如果我们打开调试日志模式,org.apache.commons.digester.Digiester.sax 中有大量日志信息,即使是当前页面也与 JASPER REPORT 无关。所以在我看来,jasper bean 没有很好地连线,所以当应用程序运行时,容器一直试图帮助 bean 连线。

这是运行时的一些正常日志(当 View 上没有 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>

这里是调试级别的千兆字节日志文件的一小部分,看起来它一直在不停地解析模板,或者试图从 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 报告组件,甚至当前 View 与 Jasper 报告无关?

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

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

非常感谢。

最佳答案

我在 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>

关于java - Jasper with Spring——来自 org.apache.commons.digester 的大量日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077258/

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