我认识到使用 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)
无论我使用什么组合skipPolicy,retryPolicy结果总是
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该演示还触发两种不同类型的异常。乐观锁定场景是我真正关心的。
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |