@Tranaction
Spring中有声明式事务和编程式事务,
加上了@Tranaction表示,把当前的事务管理交给Spring来管理,叫做声明式事务
而程序员自己手动进行事务回滚(如AOP拦截异常进行事务回滚)
如下,是手动事务也就是编程式事务
//手动进行回滚
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
我们有时候在代码上看到
@Transactional(rollbackFor = Exception.class) 为什么后面要加 rollbackFor?
答:
因为
@Transaction 时默认为RuntimeException(也就是运行时异常)异常才会回滚。
源码上有明确的描述。
所以我们有时候出现其他检查性异常的时候就不会进行回滚。
这个时候有两种解决方案:
可以使用编程式事务,也就是手动事务,通过aop拦截,进行事务的回滚
//手动进行回滚
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
2、在@Transaction加上rollbackFor=Exception.class,也就是所有的异常都会进行回滚。