我有一个关于春季批处理块过程中听众的一个非常模糊的问题。
我的块配置如下:
<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。
那么我的问题是什么: 如果发生写入错误,我会期望......
afterChunkError
&#34;被称为onWriteError
被称为。但遗憾的是只是调用了afterChunkError
方法。忽略onWriteError
方法?!?
如果我在我的配置中评论cmabChunkListener
Bean(见上文),那么onWriteError
的{{1}}确实被调用。
什么可能导致这种行为?为什么在Chunk进程中有两个单独的监听器是不可能的呢? 我的目标是调用两个方法。
非常感谢任何帮助。
非常感谢提前。
此致
Bodo Stockschlaeder
答案 0 :(得分:0)
出于好奇:我的解决方案是从块配置中定义监听器,这意味着在批处理tasklet中。
</batch:chunk>
<batch:listeners>
<batch:listener ref="midxStepListener"/>
<batch:listener>
<bean id="cmabChunkListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabChunkListener" scope="step"/>
</batch:listener>
</batch:listeners>
</batch:tasklet>
</batch:step>
此解决方案对我有用: - )
尽管如此,感谢您的回复。
亲切的问候, 博多