私は、春のバッチチャンクプロセス内のリスナーに関して、本当に厄介な問題があります。ItemWriteListenerとChunkListnerのリスナーの問題
マイチャンク構成は以下の通りである:
<batch:chunk
reader="processMidxDbItemReader"
processor="midxItemProcessor"
writer="midxCompositeItemWriter"
processor-transactional="false"
reader-transactional-queue="false"
skip-limit="${cmab.batch.skip.limit}"
commit-interval="#{jobParameters['toProcess']==T(de.axa.batch.ecmcm.cmab.util.CmabConstants).TYPE_POSTAUSGANG ? '${consumer.global.pa.midx.readCount}' : '${consumer.global.pe.midx.readCount}' }"
cache-capacity="20">
<batch:skippable-exception-classes>
<batch:include class="de.axa.batch.ecmcm.cmab.util.CmabProcessMidxException" />
</batch:skippable-exception-classes>
<batch:retryable-exception-classes>
<batch:include class="de.axa.batch.ecmcm.cmab.util.CmabTechnicalMidxException" />
<batch:include class="de.axa.batch.ecmcm.cmab.util.CmabTechnicalException" />
</batch:retryable-exception-classes>
<batch:retry-listeners>
<batch:listener ref="logRetryListener"/>
</batch:retry-listeners>
<batch:listeners>
<batch:listener>
<bean id="midxProcessSkipListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabDbSkipListener" scope="step">
<constructor-arg index="0" value="#{jobParameters['errorStatus']}" type="java.lang.String"/>
</bean>
</batch:listener>
<batch:listener>
<bean id="cmabChunkListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabChunkListener" scope="step"/>
</batch:listener>
</batch:listeners>
</batch:chunk>
midxProcessSkipListenerはすべてオーバーライドメソッドでItemProcessListenerとItemWriteListenerを実装しています。 cmabChunkListener BeanはChunkListenerを実装しています。
だから、私の問題です: 書き込みエラーが発生した場合、私は
- a)は、 "cmabChunkListener" の
afterChunkError
が - Bと呼ばれている...と予想されます) "midxProcessSkipListener" の
onWriteError
が呼び出されます。
しかし、残念なことにはとなります。afterChunkError
メソッドが呼び出されます。 onWriteError
メソッドは無視されますか?
cmabChunkListener
私の設定(上記参照)にコメントすると、midxProcessSkipListener
のonWriteError
が実際に呼び出されます。
この現象の原因は何ですか?なぜChunkプロセス内に2つの別々のリスナーを持つことができないのですか? 私の目的は、との両方のメソッドが呼び出されます。
ご協力いただければ幸いです。
事前に感謝します。好奇心のうち
よろしく、
ボーデStockschlaeder
あなたはスタックトレースを追加することができますか? –
こんにちは、プロセスがエラーをスローしないので、スタックトレースはありません。私はchunkListenerが登録されている限り、onWriteErrorメソッドが呼び出されないことを観察しています。そして、これは私が理解しようとしている問題です。 – bonaly
'logger.error("例外発生 "、e)'または 'e.printStackTrace()'でエラーを記録してから、ここに出力を追加できますか?現実的には、何らかの方法でログに記録せずに例外を「食べる」ことはめったにありません –