参考
https://blog.csdn.net/qq_20597727/article/details/84900994
https://www.cnblogs.com/chen-lhx/p/6956152.html
Transactional失效场景介绍
第一种
Transactional注解标注方法修饰符为非public时,注解不起作用.
1 |
|
第二种
在@Transactional
标注方法所在类中调用.
1 |
|
第三种
捕获了异常,但不能回滚事务.
1 |
|
解决办法
第一种
被@Transactional
标注的方法必须是public才生效.
1 | protected TransactionAttribute computeTransactionAttribute(Method method, Class<?> targetClass) { |
第二种
要想在内部使用,使用非this调用.
因为事务管理是基于动态代理对象实现的,如果在类内部自己调用其方法,就不是动态代理对象了,而是使用的this对象,从而绕过了动态代理,使其无效.
1 |
|
第三种
在catch块中抛异常,或在catch块中增加TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
语句.
1 |
|
或
1 |
|