2

Springの現在の問題をJasperレポートで示すためのスレッドがここにあります。私はSOのすべての天才の助けを借りて問題のほとんどを整理しましたが、それでもに費やされた記憶を解決することに固執しましたorg.apache.commons.digester

ジャスパーレポートBeanを配線した場合、この状況は非常に一般的であり、デバッグログモードをオンにすると、、からの大量のログ情報がありorg.apache.commons.digester.Digiester.saxますEVEN CURRENT PAGE HAS NOTHING TO DO WITH JASPER REPORT。ジャスパー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.

これは、非常に一般的なBeanであるapplicationContext構成ファイル内の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、またはジャスパーライブラリから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現在のビューでさえ、ジャスパーレポートとは何の関係もありません。

  2. それがジャスパーBeanがうまく配線されていないのか、それとも何か問題があるのか​​についてはまだ非常に混乱してdigesterいるため、ジャスパーレポートBean/テンプレートを非常にアクティブに保つことができます。不要なメモリ消費を節約しようとしていますが、ログをオフにするだけではdigester、おそらくバックグラウンドで実行されているため、解決策にはならない可能性があります。

  3. tomcat / vfabbricでアプリケーションを起動すると、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 に答える