Spring batch @OnWriteError方法不更新数据库记录状态
我有一个itemWriter,可以将项目写入表中。在编写时,我得到一个ConstraintViolationException,我使用SkipPolicy跳过该异常,并且我已经实现了@OnWriteError方法。因此捕获并跳过该异常并在侦听器内调用@OnWriteError方法效果很好。在@OnWriteError方法中,我调用另一个方法,在捕获异常时将事件标记为失败 @书写错误 public void onWriteError(异常、列表项) { log.info(“调用了写入错误侦听器”) 学生=items.get(items.size()-1) studnetManager.updateStatus(学生,“失败”) } 公共无效更新状态(学生、状态) { 学生状态(状态) StudentRepository.save(学生) } 已成功调用UpdateStatus(),但学生记录未标记为失败。Spring batch @OnWriteError方法不更新数据库记录状态,spring-batch,Spring Batch,我有一个itemWriter,可以将项目写入表中。在编写时,我得到一个ConstraintViolationException,我使用SkipPolicy跳过该异常,并且我已经实现了@OnWriteError方法。因此捕获并跳过该异常并在侦听器内调用@OnWriteError方法效果很好。在@OnWriteError方法中,我调用另一个方法,在捕获异常时将事件标记为失败 @书写错误 public void onWriteError(异常、列表项) { log.info(“调用了写入错误侦听器”)
有人能帮我理解这一点吗?正如Javadoc中提到的,将在一个要回滚的事务中调用
因此,您需要在单独的事务中调用该代码(使用
@Transactional(propagation=“REQUIRES_NEW”)
注释updateStatus
,或者使用事务模板以编程方式调用事务代码.谢谢@Mahmoud Ben Hassine。这确实解决了我的问题。但是使用@Transactional(propagation=“REQUIRES_NEW”)对性能有何影响?在这种情况下,请接受答案:。这不应该影响性能,除非您有大量记录并且扫描了大量数据块(意味着在单独的事务中逐个重试项目)。