SpringBoot系列教程之事务传递属性 (4)

输出结果如下

============ nested事务2 start ========== nested事务2 >>>> {id=490, name=初始化, money=200, is_deleted=false, create_at=2020-02-02 15:23:26.0, update_at=2020-02-02 15:23:26.0} nestedCall: >>>> {id=490, name=外部事务修改, money=200, is_deleted=false, create_at=2020-02-02 15:23:26.0, update_at=2020-02-02 15:23:46.0} nested: after updateMoney name >>>> {id=490, name=更新, money=200, is_deleted=false, create_at=2020-02-02 15:23:26.0, update_at=2020-02-02 15:23:46.0} 事务回滚 nested事务2 >>>> {id=490, name=初始化, money=200, is_deleted=false, create_at=2020-02-02 15:23:26.0, update_at=2020-02-02 15:23:26.0} ============ nested事务2 end ==========

仔细看上面的输出,对别case1,其特别在于全部回滚了,内部事务的修改也被回滚了

7. REQUIRES_NEW

这个和上面的NESTED有点相似,但是又不一样

当存在活动事务时,新创建一个事务执行

当不存在活动事务时,和REQUIRES效果一致,创建一个事务执行

注意

REQUIRES_NEW和NESTED相比,两个事务之间没有关系,任何一个回滚,对另外一个无影响

测试case和前面差不多,不多做细说...

8. 小结

前面介绍了7中传播属性,下面简单对比和小结一下

事务 特点
REQUIRED   默认,如果存在事务,则支持当前事务;不存在,则开启一个新事务  
SUPPORTS   如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行  
MANDATORY   需要在一个正常的事务内执行,否则抛异常  
REQUIRES_NEW   不管存不存在事务,都开启一个新事务  
NOT_SUPPORTED   不管存不存在,都以非事务方式执行,当存在事务时,挂起事务  
NEVER   非事务方式执行,如果存在事务,则抛异常  
NESTED   如果不存在事务,则开启一个事务运行;如果存在事务,则运行一个嵌套事务  
II. 其他 0. 系列博文&源码

系列博文

180926-SpringBoot高级篇DB之基本使用

190407-SpringBoot高级篇JdbcTemplate之数据插入使用姿势详解

190412-SpringBoot高级篇JdbcTemplate之数据查询上篇

190417-SpringBoot高级篇JdbcTemplate之数据查询下篇

190418-SpringBoot高级篇JdbcTemplate之数据更新与删除

200119-SpringBoot系列教程之声明式事务Transactional

200120-SpringBoot系列教程之事务隔离级别知识点小结

源码

工程:https://github.com/liuyueyi/spring-boot-demo

实例源码: https://github.com/liuyueyi/spring-boot-demo/blob/master/spring-boot/101-jdbctemplate-transaction

1. 一灰灰Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

一灰灰Blog个人博客 https://blog.hhui.top

一灰灰Blog-Spring专题博客

一灰灰blog

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjdfj.html