如何配置Spring Batch从不重试,总是跳过

rea*_*sim 10 spring-batch

我认识到使用 spring-batch 和基于块的读取器/处理器/编写器设置会出现一些不需要的和不直观的行为,其中项目编写器被调用的频率比我想要的要多。

我想要一个设置,在任何异常情况下,作者都不会被再次调用。

请看一下这个非常精简的演示步骤初始化:

stepBuilder
.chunk(1)
.reader(new ListItemReader<>(List.of("1", "2", "3")))
.writer(items -> {
    LOGGER.info("About to write " + items);
    throw new RuntimeException();
})
.faultTolerant()
.skipPolicy((throwable, skipCount) -> true)
.retryPolicy(new MaxAttemptsRetryPolicy(1))
// or
//.retryPolicy(new NeverRetryPolicy())
Run Code Online (Sandbox Code Playgroud)

无论我使用什么组合skipPolicyretryPolicy结果总是

About to write [1]
About to write [1]
About to write [2]
About to write [2]
About to write [3]
About to write [3]
Run Code Online (Sandbox Code Playgroud)

我的期望 - 或者我想实现的目标 - 是在每个异常之后处理/写入下一个项目。

可以在这里找到完全可执行(但仍然简约)的演示 https://github.com/LorenzSchumann/spring-batch-demo-simple

可以在此处找到 JPA 的类似版本。https://github.com/LorenzSchumann/spring-batch-demo-jpa该演示还触发两种不同类型的异常。乐观锁定场景是我真正关心的。