REQUIRES_NEW vs NESTED
REQUIRES_NEW,始终启动一个新事物
- 两个事物没有关联
NESTED,在原事物内启动一个内嵌事物
- 两个事物有关联
- 外部事物回滚,内嵌事物也会回滚
Talk is cheap,show me the code.
/**
* 内部方法B
* @param user
* @throws RollbackException
*/
@Override
@Transactional(rollbackFor = RollbackException.class,propagation = Propagation.REQUIRES_NEW)
public void bInsert(User user) throws RollbackException {
userMapper.insert(userB);
throw new RollbackException();
}
/**
* 外部方法A
* @param user
*/
@Transactional(rollbackFor = RuntimeException.class)
public void aInsert(User user) {
userMapper.insert(userA);
try {
this.userService.bInsert(userB);
} catch (RollbackException e) {
log.error("RollbackExceptio