@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
以编程方式调用事务代码)。
我有一个将项目写入 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
以编程方式调用事务代码)。