@OnWriteError方法未更新数据库记录状态

时间:2020-07-17 11:49:37

标签: spring-batch

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

@OnWriteError

public void onWriteError(Exception,Exception,List Items) {

log.info(“ WRITE ERROR LISTENER CALLED”);

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

studnetManager.updateStatuss(学生,“ FAILED);

}

公共无效updateStatuss(学生,状态) {

Student.setStatus(status);

StudentRepository.save(Student);

}

updateStatuss()被成功调用,但是学生记录未标记为FAILED。 谁能帮助我理解这一点?

1 个答案:

答案 0 :(得分:1)

如Javadoc中所述,ItemWriteListener#onWriteError将在要回滚的事务中被调用。

因此,您需要在单独的事务中调用该代码(用updateStatus注释@Transactional(propagation = "REQUIRES_NEW")或使用TransactionTemplate以编程方式调用事务代码)。

相关问题