spring事务

总结

事务方法调private方法

本类的事务方法调自己的private非事务方法,报异常可以回滚,保证事务的整体性。

失效的场景

方法不是public

  • 源码中事务方法,会判断必须是public
    image

final修饰

  • spring要用aop,动态代理,增强该方法(jdk,cglib),final修饰的方法,子类无法重写。

自调用问题

1:自己注入自己(亲测最简单,事务方法用代理成员变量调用)
image

2:AopContext拿
image
image

3:注入全局作用域
image

类是否已交给spring容器管理

事务是否开启(springboot默认开启,xml需要添加配置)

image

rollBack的Exception范围

这里有个知识点:java规范规定,所有非RuntimeException的异常,必须throws 或者 在代码里try catch,所以方法上没有throws 并且代码里也无手动try 非RuntimeException异常,那spring默认写法 @Transactional是一定能保证事务的。
@Transactional正常这样写就可以,不正常指的是,方法上显式的throws 非RuntimeException,并且方法里没有try catch后 throw 为RuntimeException异常

方法上显式的throws
1:要么加上属性@Transactional(rollbackFor = Exception.class)
2:要么方法里,try catch后,自己throw 为RuntimeException

传播属性

try-catch后不抛异常

DB的存储引擎是否支持

多线程调用(ThreadLocal)

posted @ 2022-07-10 17:13  jf666new  阅读(43)  评论(0)    收藏  举报