Spring batch itemProcessor中的自定义计数器

Spring batch itemProcessor中的自定义计数器,spring-batch,Spring Batch,如何在itemProcessor中实现自定义计数器?基本计数器可以按定义工作,但我需要计数器不包括重试的项或回滚的项。也许我还没有找到itemProcessor的类似itemStream的接口。使用SpringBatch 2.1.7 编辑:可以找到批配置(使用compositeProcessor)。我已尝试实现如下计数器(运气不佳): 为所有处理器设置itemProcessListener,并在afterProcess(I,O)中增加缓存中每个处理器的计数器(缓存也在每个处理器中)。然后对所有处

如何在itemProcessor中实现自定义计数器?基本计数器可以按定义工作,但我需要计数器不包括重试的项或回滚的项。也许我还没有找到itemProcessor的类似itemStream的接口。使用SpringBatch 2.1.7

编辑:
可以找到批配置(使用compositeProcessor)。我已尝试实现如下计数器(运气不佳): 为所有处理器设置itemProcessListener,并在afterProcess(I,O)中增加缓存中每个处理器的计数器(缓存也在每个处理器中)。然后对所有处理器使用itemWriteListener,并在afterWrite()中刷新缓存以执行步骤。但这不起作用,因为itemProcessListener没有像我预期的那样与CompositeProcessor子处理器一起工作。还有别的想法吗

EDIT:
我已删除compositeProcessor,并尝试仅使用单个处理器,但发现itemProcessListener.afterProcess将被调用太多次。我猜这与区块处理模式与单一处理模式有关。因此,块的一些未重试项将被重新处理。我还尝试使用RetryListener(如果重试正在进行,则禁用计数器增量),但无法对其进行配置。打开和关闭不会在RetryListener上调用。

我认为域对象应该符合您的要求。

拦截它,访问想要的属性。

我能够解决这个反问题;不过,我已经改变了一点批次。首先要删除的是compositeItemProcessor。然后,我需要将SpringBatch版本更新到2.2.7(以获取ChunkListener.afterChunkError)。现在,当处理器增加一个计数器时,我将把计数器缓存到处理器。我还使用ChunkListener.afterChunkError清除缓存,因此当重新处理项时,旧的计数器值将被清除。当ItemWriteListener.afterWrite()发生时,我将刷新缓存到stepExecutionContext。通过这种方式,我能够克服重试增量计数器问题。

您如何处理区块回滚或区块中的项目重试?我认为我问题中的链接指向您描述的解决方案。如果域对象不足以创建自定义bean(或自定义属性)并将其存储到执行上下文中;使用侦听器更新自定义bean属性。您能详细说明一下吗?目前我正在使用类似于上面链接的代码,但当重试项时,计数器增量也会重试;批处理完成时给我的计数器值不正确。是将计数器与批处理的实际结果同步以捕获重试/回滚/etc并分别尝试减少计数器的唯一方法吗?这听起来像是一个解决办法。或者我在这里遗漏了一些基本的东西。我已经更新了这个问题,包括我的配置链接和我实现计数器的尝试。