Java Spring批处理:在较小的块中重试块,而不是单个项目处理

Java Spring批处理:在较小的块中重试块,而不是单个项目处理,java,spring,spring-batch,spring-retry,retrypolicy,Java,Spring,Spring Batch,Spring Retry,Retrypolicy,我有一个使用SpringBatch 3.0.6的应用程序。Spring批处理作业使用块处理。提交间隔设置为100,重试限制设置为5 当达到提交间隔时,写入程序(通过TCP)将数据块(100条记录)写入另一个应用程序。如果其中一条记录是坏的(无论出于何种原因导致异常),那么Spring Batch会尝试写入数据块5次(重试限制),每次都失败(如预期) 然后,SpringBatch通过一次重试一条记录(即提交间隔=1),尝试找出区块中100条记录中的哪一条失败。这似乎是重试的默认行为 是否有一种更有

我有一个使用SpringBatch 3.0.6的应用程序。Spring批处理作业使用块处理。提交间隔设置为100,重试限制设置为5

当达到提交间隔时,写入程序(通过TCP)将数据块(100条记录)写入另一个应用程序。如果其中一条记录是坏的(无论出于何种原因导致异常),那么Spring Batch会尝试写入数据块5次(重试限制),每次都失败(如预期)

然后,SpringBatch通过一次重试一条记录(即提交间隔=1),尝试找出区块中100条记录中的哪一条失败。这似乎是重试的默认行为

是否有一种更有效的方法,例如一次重试10条记录,并逐步缩小重试大小,直到找到有问题的记录。这样,如果第95条记录不好,那么我们发现它比从记录1开始一次检查一条记录要快

我在2011年发现了这篇文章:


有没有办法让某人先尝试较小的块来缩小坏记录的位置。较小的区块大小(例如,10个项目)可以是可选的用户可配置项目,之后SB可以一次尝试一个项目来查找坏记录。

您可以做一件事来创建自定义写入器,将写入器(写入数据库的写入器)打包,直到完成所有记录,因此,您可以完全控制该自定义编写器。自定义编写器方法可能会导致真正的长时间运行事务。鉴于该逻辑是在
FaultTolerantChunkProcessor
的私有方法
scan
中实现的,您可能需要重写该类的一个好块(至少是
write
方法)然后实例化它。简言之…不。如果当前代码没有重大修改,这是不可能的。谢谢大家的回复。我想将SB配置为一次重试超过1条记录,Michael M.给了我需要的答案。