【发布时间】:2018-02-08 16:54:54
【问题描述】:
我有一个在编写器上使用重试的春季批次。作者长这样:
public class MyWriter implements ItemWriter<MyClass> {
@Retryable(maxAttempts=3, backoff=@Backoff(delay=2000))
public void write(List<? extends MyClass> list) throws Exception {
// db operation 1 -- insert query
// some business logic
// db operation 2 -- update query
}
}
如果“db operation 2”出现异常,则调用重试并按预期再次从“db operation 1”开始执行。但是“db operation 1”是一个插入查询,这次会抛出异常,因为它试图再次插入相同的记录(并且对 DB 的唯一约束失败)。最终,批处理在 3 次尝试后失败,并且此步骤中的任何内容都不会提交到数据库。
在重试之前不应该回滚/刷新“db operation 1”吗?这是预期的行为还是实施有问题?
我正在使用 Spring Boot 应用程序和 Spring jdbc。
【问题讨论】:
标签: spring spring-batch