Spring框架

8.5 事务的传播行为

8.5.1 简介

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。

事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。

事务传播属性可以在@Transactional注解的propagation属性中定义。

8.5.2 测试

  • . 说明

①REQUIRED传播行为

当bookService的purchase()方法被另一个事务方法checkout()调用时,它默认会在现有的事务内运行。这个默认的传播行为就是REQUIRED。因此在checkout()方法的开始和终止边界内只有一个事务。这个事务只在checkout()方法结束的时候被提交,结果用户一本书都买不了。

②. REQUIRES_NEW传播行为

表示该方法必须启动一个新事务,并在自己的事务内运行。如果有事务在运行,就应该先挂起它。

8.5.3 补充

在Spring 2.x事务通知中,可以像下面这样在<tx:method>元素中设定传播事务属性。

 

8.6 事务的隔离级别

8.6.1 数据库事务并发问题

         假设现在有两个事务:Transaction01和Transaction02并发执行。

  • 脏读

         ①Transaction01将某条记录的AGE值从20修改为30。

         ②Transaction02读取了Transaction01更新后的值:30。

         ③Transaction01回滚,AGE值恢复到了20。

         ④Transaction02读取到的30就是一个无效的值。

  • 不可重复读

         ①Transaction01读取了AGE值为20。

         ②Transaction02将AGE值修改为30。

         ③Transaction01再次读取AGE值为30,和第一次读取不一致。

  • 幻读

         ①Transaction01读取了STUDENT表中的一部分数据。

         ②Transaction02向STUDENT表中插入了新的行。

         ③Transaction01读取了STUDENT表时,多出了一些行。

 

 

 


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)