默认规则
1 让checked例外也回滚: @Transactional(rollbackFor=Exception.class),一般只需添加这个即可
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED),或者不添加
注意事项
如果逻辑代码使用 try cate 了,则需要抛出一个RuntimeException异常才能正常回滚
原因是SpringBoot检测到使用了try cate后 默认认为进行了手动回滚
自动回滚
@Transactional(rollbackFor=Exception.class)
public void handlePass(ShopAudit audit) {
try {
//...事务代码
} catch (ServiceException e) {
throw new RuntimeException();
}
}
缺点:不能自定义返回值
手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
只需要将事务代码使用try cate包起来,然后再cate中使用上面和这个就可做到手动回滚了,也可以再回滚完后使用return 了
@Transactional(rollbackFor=Exception.class)
public void handlePass(ShopAudit audit) {
try {
//...事务代码
} catch (ServiceException e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
优点:可以自定义返回值