当使用spring批处理框架同时执行一个步骤时,如何设置skipLimit



我使用spring-batch将数据从文件加载到数据库。作业只包含一个步骤。我使用ThreadPoolTaskExecutor来同时执行步骤。步骤与此步骤类似。

public Step MyStep(){
return StepBuilderFactory.get("MyStep")
.chunk(10000)
.reader(flatFileItemWriter)
.writer(jdbcBatchItemWriter)
.faultTolerant()
.skip(NumberFormatException.class)
.skip(FlatFileParseException.class)
.skipLimit(3)
.throttleLImit(10)
.taskExecutor(taskExecutor)
.build();
}

存在3〃;数字格式";错误,所以我设置了skipLimit 3,但我发现当我执行作业时,它会启动10个线程,每个线程有3个跳过,所以我总共有3*10=30个跳过,而我只需要3个。

所以问题是,这会造成任何问题吗?还有其他方法可以在同时执行一个步骤的同时跳过3次吗?

github问题

Robert Kasanicky打开BATCH-926并评论

当区块同时执行时,每个区块都使用自己的skipCount本地副本(来自StepContribution(。给定skipLimit=1,并且10个块执行并发性,我们最终可以成功执行作业并跳过10次。随着并发区块数量的增加,skipLimit更多地成为每个区块的限制,而不是作业。

Dave Syer评论

我投票支持记录当前的行为。

Robert Kasanicky评论

记录了工厂bean 中的当前行为

然而,对于非常旧的spring-batch版本来说,这似乎是正确的。我的代码中有一个不同的问题,但当我使用多个线程时,skipLimit似乎是聚合的。尽管在引发SkipLimitException时,作业有时会挂起而没有正确失败。

相关内容

  • 没有找到相关文章

最新更新