Spring batch @OnWriteError方法不更新数据库记录状态

Spring batch @OnWriteError方法不更新数据库记录状态,spring-batch,Spring Batch,我有一个itemWriter,可以将项目写入表中。在编写时,我得到一个ConstraintViolationException,我使用SkipPolicy跳过该异常,并且我已经实现了@OnWriteError方法。因此捕获并跳过该异常并在侦听器内调用@OnWriteError方法效果很好。在@OnWriteError方法中,我调用另一个方法,在捕获异常时将事件标记为失败 @书写错误 public void onWriteError(异常、列表项) { log.info(“调用了写入错误侦听器”)

我有一个itemWriter,可以将项目写入表中。在编写时,我得到一个ConstraintViolationException,我使用SkipPolicy跳过该异常,并且我已经实现了@OnWriteError方法。因此捕获并跳过该异常并在侦听器内调用@OnWriteError方法效果很好。在@OnWriteError方法中,我调用另一个方法,在捕获异常时将事件标记为失败

@书写错误

public void onWriteError(异常、列表项) {

log.info(“调用了写入错误侦听器”)

学生=items.get(items.size()-1)

studnetManager.updateStatus(学生,“失败”)

}

公共无效更新状态(学生、状态) {

学生状态(状态)

StudentRepository.save(学生)

}

已成功调用UpdateStatus(),但学生记录未标记为失败。
有人能帮我理解这一点吗?

正如Javadoc中提到的,将在一个要回滚的事务中调用


因此,您需要在单独的事务中调用该代码(使用
@Transactional(propagation=“REQUIRES_NEW”)
注释
updateStatus
,或者使用
事务模板以编程方式调用事务代码.

谢谢@Mahmoud Ben Hassine。这确实解决了我的问题。但是使用@Transactional(propagation=“REQUIRES_NEW”)对性能有何影响?在这种情况下,请接受答案:。这不应该影响性能,除非您有大量记录并且扫描了大量数据块(意味着在单独的事务中逐个重试项目)。