itemProcessor中的自定义计数器

时间:2014-08-18 12:27:30

标签: spring-batch

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

EDIT:可以找到批处理配置here(使用compositeProcessor)。我试过像下面那样实现计数器(没有运气): 为所有处理器设置itemProcessListener,并在afterProcess(I,O)中为缓存中的每个处理器递增计数器(缓存也在每个处理器中)。然后对所有处理器使用itemWriteListener,并在afterWrite()中将缓存刷新到stepExecution。但这不起作用,因为itemProcessListener没有像我期望的那样使用compositeProcessors子处理器。还有其他想法吗?

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

2 个答案:

答案 0 :(得分:0)

我认为StepExecution域名对象应符合您的要求 使用StepExecutionListener拦截它并访问所需的属性。

答案 1 :(得分:0)

我能够解决这个反问题;但是我稍微更改了批次。要删除的第一件事是compositeItemProcessor。然后我需要将SpringBatch版本更新为2.2.7(获取ChunkListener.afterChunkError)。现在,当处理器递增计数器时,我会将计数器缓存到处理器。我还使用ChunkListener.afterChunkError来清除缓存,因此当重新处理项目时,旧的计数器值将被清除。当ItemWriteListener.afterWrite()发生时,我将把缓存刷新到stepExecutionContext。这样我就能够克服重试增量计数器问题。

相关问题