Spring batch ItemWriteListener和ChunkListner的侦听器问题
关于spring批处理块过程中的侦听器,我有一个非常模糊的问题 我的区块配置如下所示:Spring batch ItemWriteListener和ChunkListner的侦听器问题,spring-batch,Spring Batch,关于spring批处理块过程中的侦听器,我有一个非常模糊的问题 我的区块配置如下所示: <batch:chunk reader="processMidxDbItemReader" processor="midxItemProcessor" writer="midxCompositeItemWriter" processor-transactional="false" reader-transactional-queue=
<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。
cmabChunkListenerBean实现ChunkListener
那么,我的问题是什么:
如果发生写入错误,我希望
- a) 调用“cmabChunkListener”的
afterChunkError
- b) 调用“midxProcessSkipListener”的
onWriteError
afterChunkError
方法。onWriteError
方法被忽略
如果我在配置(见上文)中注释cmabChunkListener
Bean,那么midxProcessSkipListener
的onWriteError
确实被调用
什么会导致这种行为?为什么在区块过程中不可能有两个独立的侦听器?
我的目标是调用这两种方法
任何帮助都将不胜感激
非常感谢
问候,
出于好奇,Bodo Stockschlaeder在我的例子中,解决方案是在块配置之外定义侦听器,也就是在批处理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>
此解决方案对我有效:-)
不过,谢谢你的回复
亲切问候,,
出于好奇,Bodo在我的例子中,解决方案是在块配置之外定义侦听器,也就是在批处理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>
此解决方案对我有效:-)
不过,谢谢你的回复
亲切问候,,
Bodo你能添加堆栈跟踪吗?嗨,我没有任何堆栈跟踪,因为进程没有抛出任何错误。我只是注意到,只要注册了ChunkListener,就不会调用onWriteError方法。这就是我试图理解的问题。你能用
logger.error(“遇到异常”,e)
或e.printStackTrace()
记录错误,然后在这里添加输出吗?实际上,如果不以某种方式记录异常,您很少会希望“吃掉”异常。您可以添加堆栈跟踪吗?嗨,我没有任何堆栈跟踪,因为进程不会抛出任何错误。我只是注意到,只要注册了ChunkListener,就不会调用onWriteError方法。这就是我试图理解的问题。你能用logger.error(“遇到异常”,e)
或e.printStackTrace()
记录错误,然后在这里添加输出吗?实际上,如果不以某种方式记录异常,您很少会希望“吃掉”异常