随堂笔记14-spring之事务
-
@EnableTransactionManagement工作原理:开启事务本质就是增加一个advisor,而使用@EnableTranscationManagement是向spring容器内添加俩个bean
- autoproxyRegister
- proxyTransactionManagerMentConfiguration
其中autoproxyRegister注册一个bean,作用是开启自动代理,初始化后去寻找advisor类型的bean判断当前bean是否匹配advisor,是否利用动态代理产生代理对象
另一个配置类,是判断类上是否有@Transaction注解并生成代理对象,代理对象执行方法时就会进入代理方法中
-
spring事务基本执行原理:一个bean在创建的生命周期里,会判断是否有@transaction注解,若是存在则生成一个代理对象,在匹配advisor,若是匹配则执行代理方法,流程如下
- 利用所配置的platForm 创建一个数据库连接
- 修改autocommit为false
- 执行业务方法
- 无异常提交
- 异常回滚
-
spring事务传播机制:比如当前场景,a在当前事务调用b,b需要开启一个新的事物执行
-
首先代理对象执行前利用事务管理器新建一个数据库连接a
-
autocommit更改为false
-
数据库连接a放入threadlocal
-
执行a()
-
执行a()的时候代理对象调用b()
- 代理对象执行b()钱发现threadlocal存在了数据库连接a,则进行挂起
- 挂起是吧数据库连接a从threadlocal移除,放入挂起资源对象中
- 然后在新建一个数据库连接b
- autocommit改为false
- 放入threadlocal
- 执行b()
- 从threadlocal中拿到连接b及逆行提交
- 恢复挂起的a.把连接a放入threadLocal
- a()执行完后提交
以上就是执行过程,判断是否存在事物就是看threadlocal中是否存在当前连接
-
-
spring事物传播机制分类-案例分析
默认的传播机制为required,当前没有则新建事物,若有则在当前事务里执行
-
执行时出现异常,俩个都回滚
-
同一个事物内,异常了都回滚
-
a出现异常回滚,test也会收到异常也会回滚
-
test捕获了异常,但是手动设置了回滚,也会回滚
-
transactionSynchronizationManager可以看成事物的工具类
不恋尘世浮华,不写红尘纷扰