Spring中事务的传播行为
来源:互联网 发布:巨型海报打印软件 编辑:程序博客网 时间:2024/06/06 08:43
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行.
事务的传播行为可以由传播属性指定.Spring定义了7 种类传播行为:
先来看一下第一中传播方式的示意图:
整个过程只有一个事务,如果发生回滚,那么一起回滚~
随后,看一下REQURED_NEW方式的示意图:
整个过程中有多个事务,如果发生回滚,只有发生状况后的数据发生了回滚,而前面的数据则不会回滚。
EX:
创建一个Cashier类:
如果采取默认的也就是第一种传播方式会怎样呢?
抛出异常的时候,数据库中的两行数据都不会发生改变
当我们使用REQUIRES_NEW 方式的时候:可以发现第一行的数据发生了改变,而第二行中的数据发生了回滚。
先来看一下第一中传播方式的示意图:
整个过程只有一个事务,如果发生回滚,那么一起回滚~
随后,看一下REQURED_NEW方式的示意图:
整个过程中有多个事务,如果发生回滚,只有发生状况后的数据发生了回滚,而前面的数据则不会回滚。
EX:
创建一个Cashier类:
@Repositorypublic class CashierImp implements Cashier { @Autowired private BookShopService bookShopService; @Transactional public void checkout(String username, List<String> isbns) { for(String isbn:isbns){ bookShopService.purchase(username,isbn); } }}同时在booService中也有一个添加了事务声明的函数:
@Transactional public void purchase(String username, String isbn) { //获取书的单价 int price=bookShopDao.findBookPriceByIsbn(isbn); //更新书的库存 bookShopDao.updateBookStock(isbn); //更新用户余额 bookShopDao.updateUserAccount(username,price); }
如果采取默认的也就是第一种传播方式会怎样呢?
抛出异常的时候,数据库中的两行数据都不会发生改变
当我们使用REQUIRES_NEW 方式的时候:可以发现第一行的数据发生了改变,而第二行中的数据发生了回滚。
0 0
- Spring中事务的传播行为
- Spring中事务的传播行为
- Spring中事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring 事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Linux下安装使用SourceInsight
- Java Classloader机制解析
- response.Redirect进行页面的跳转时所进行的请求和响应的过程
- Dijkstra算法学习
- HDU1599
- Spring中事务的传播行为
- java连接redis
- 剑指offer 构建乘积数组
- 关于错误和异常处理(持续更新)
- C 函数指针 参数传递
- typedef用法总结笔记
- 170419 汇编-cmp指令
- bzoj 4402 Claris的剑
- 全球各国as自治系统总数排名、全球自治系统总数排名