在我的Spring Boot项目中,我实现了以下服务方法:
@Transactional
public boolean validateBoard(Board board) {
boolean result = false;
if (inProgress(board)) {
if (!canPlayWithCurrentBoard(board)) {
update(board, new Date(), Board.AFK);
throw new InvalidStateException(ErrorMessage.BOARD_TIMEOUT_REACHED);
}
if (!canSelectCards(board)) {
update(board, new Date(), Board.COMPLETED);
throw new InvalidStateException(ErrorMessage.ALL_BOARD_CARDS_ALREADY_SELECTED);
}
result = true;
}
return result;
}
在这个方法内,我使用另一个服务方法叫做update
:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public Board update(Board board, Date finishedDate, Integer status) {
board.setStatus(status);
board.setFinishedDate(finishedDate);
return boardRepository.save(board);
}
我需要在update
方法中独立于validateBoard
方法中启动的所有者事务提交更改到数据库。目前,如果出现任何异常,任何更改都会回滚。
即使使用@Transactional(propagation = Propagation.REQUIRES_NEW)
也不起作用。
如何在Spring中正确实现此操作并允许嵌套事务?
REQUIRES_NEW
传播被忽略)。您应该将update
方法迁移到另一个Spring bean中。 - Ori Dar