阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-24 详解事务的传播-1

面试题:spring里面事务的传播有哪几种,分别是怎样的

点进来看@Transactional的源码



在使用这个注解的时候,其实是有一个默认的值 的。表示当前是一定要使用事务。如果当前的事物没有或者不存在,那么会自己新创建一个事=物。‘如果当前方法本身存在事物,那么就不需要再额外的创建一个事物。它会额外的加入现有的事物里面去。

Propagation是一个枚举类

Ctrl+F12就可以把当前类里面的方法内容以列表的形式展示出来。让我们进行快速的浏览。

新增加的结果方法用于测试


创建了另外的service

这个service主要是调用保存的方法。


这里有个注释,事物传播一共有7个

我们先来讲第一个Required


在api项目里面加入了Junit的依赖。

新建test类




全部都不写事物,会出现的问题


数据库内现在一条数据都没有





报错了。


开启事物





数据库内数据清空

运行测试类

 
数据库内没有数据


这是因为这里进行了事物的传播。
在子方法里面虽然没有增加@Transactional的注解。

但是事物会传递到下一个方法里面的

当我们的子方法内出现异常以后。两个方法里面的事物都会回滚。

开启子方法的事物


父方法的事物注释掉。


运行测试。父方法成功保存了。父级别方法并没有事物,

开启父方法事物,子方法也开启


子方法的事物也是开启的

数据库内清空

运行测试类

依然报错

数据库依然没有数据

required总结



required多用于增删改的操作。

supports

从字面上看是一种支持。主要是用于做查询的。

父方法事务先注释掉

子方法的事务改为supports


清空数据库,运行测试类。





子方法用了supports。外层方法并没有事务,它就不使用事务,它是跟着外层走的
如果说外层使用了required。子方法还是supports


清空数据库,运行测试。---》数据库为空。事务进行了回滚。

supports总结

主要用于查询。


required和supports是两个最常用的

Mandatory

首先看它的注释。它是支持当前的事物的,如果不存在事物就会抛出异常,它强制了谁调用了我 ,谁就必须要有事物。它没有事务就会抛出异常。

把父方法的事物注释掉。

被调用放,也就是子方法使用mamdatory

运行测试





父方法的事物开启

运行测试,没有报Mandatory抛出的异常。这个错误是我自己代码的异常。

mandatory总结









 

猜你喜欢

转载自www.cnblogs.com/wangjunwei/p/12046772.html