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

@OnWriteError method not updating the DB record status

我有一个将项目写入 table 的 itemWriter。编写时,我得到一个 ConstraintViolationException,我正在使用 SkipPolicy 跳过该异常,并且我已经实现了 @OnWriteError method.So 它可以很好地捕获和跳过异常并在侦听器中调用 @OnWriteError 方法。在 @OnWriteError 方法中,我正在调用另一个方法来在捕获到异常时将事件标记为失败。

@OnWriteError

public void onWriteError(Exception exception,List items ) {

log.info("WRITE ERROR LISTENER CALLED");

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

studnetManager.updateStatuss(学生,“失败”);

}

public void updateStatuss(Student student, Status status) {

Student.setStatus(状态);

StudentRepository.save(学生);

}

updateStatuss() 调用成功,但学生记录未标记为失败。 谁能帮我理解这个?

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

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