输出结果如下
============ 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专题博客