Transactions 有没有办法防止批处理在发生跳过时重复处理同一块/项目?

Transactions 有没有办法防止批处理在发生跳过时重复处理同一块/项目?,transactions,spring-batch,skip,spring-retry,Transactions,Spring Batch,Skip,Spring Retry,在我的特定场景中,我必须将从文件读取的巨大实体持久化到数据库,但我的提交间隔配置为value=1。另外,我不太确定使用的CompositeItemProcessor中的委托处理器是否是幂等的。因此,我的问题是,是否有一种方法可以防止在重新处理上浪费时间,并避免对数据库进行许多未使用的查询。我还想使用SkipListener将读/处理/写操作中的错误记录到一个特定的表中,并怀疑这样的配置(没有再处理)与此不符 我使用的是spring batch 2.1.9 提前谢谢 _______________

在我的特定场景中,我必须将从文件读取的巨大实体持久化到数据库,但我的提交间隔配置为
value=1
。另外,我不太确定使用的
CompositeItemProcessor
中的委托处理器是否是幂等的。因此,我的问题是,是否有一种方法可以防止在重新处理上浪费时间,并避免对数据库进行许多未使用的查询。我还想使用SkipListener将读/处理/写操作中的错误记录到一个特定的表中,并怀疑这样的配置(没有再处理)与此不符

我使用的是spring batch 2.1.9

提前谢谢

____________________________更新日期:2016年5月7日____________________________

经过几天的研究,我意识到在一些用户和spring开发人员之间存在着概念上的争论

我现在知道,正如@MichaelMinella在评论中所说的,这种行为是在编写阶段抛出的跳过异常上设计的:

ItemWriter\write
方法接收项目列表。不去 通过他们一次一个,我们无法确定是哪一个 在列表中,在编写器中引发了异常


因此,框架还无法在不扫描整个列表的情况下发现失败项(即使区块大小为1)。框架的内部行为使用了
FaultTolerantChunkProcessor
,而
RetryTemplate
在本文中有详细描述。如果块大小等于一,则不应多次处理该项。当发生跳过时,spring batch将删除块中的跳过项并重新处理它。当区块仅包含一个元素时,不应多次处理任何元素。

如果区块大小等于一,则不应多次处理项目的。当发生跳过时,spring batch将删除块中的跳过项并重新处理它。当数据块仅包含一个元素时,不应多次处理任何元素。

我也期望@Joshist出现这种行为,但实际上框架总是重新处理读取时缓存的列表,并为每个项目处理小数据块,以了解哪个项目导致了错误,即使该列表只包含一个元素。我想知道的是如何覆盖此行为或将批处理配置为跳过此昂贵的重试。如果我想使用SkipCheckListener在处理时也注册错误,这可能是不可能的。我也希望@joshiste出现这种行为,但实际上框架总是重新处理读取时缓存的列表,并为每个项处理小数据块,以了解是哪个项导致了错误,即使该列表只包含一个元素。我想知道的是如何覆盖此行为或将批处理配置为跳过此昂贵的重试。如果我也想使用SkipCheckListener来注册处理中的错误,这可能是不可能的。