脱离 Spring 实现复杂嵌套事务,之三(REQUIRES_NEW
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文是<实现 Spring 的事务控制>系列文章中一篇。本文假设读者已经阅读并理解《 实现 Spring 的事务控制,之一(必要的概念) 》文中所涉及的概念( 当前连接 、 引用计数 ),以及数据库连接的( new状态 ) RROPAGATION_REQUIRES_NEW(独立事务) 定义: 如果当前存在事务则挂起当前事务,并开启一个全新的事务。新事务与已存在的事务之间彼此没有关系。 解释: REQUIRES_NEW 行为强调了独立性。它保证了每个事务状态管理范围内锁使用的数据库连接是彼此不一样的。例如独立事务会满足“A事务中存在B事务,当B事务递交的时候不影响A事务。A,B两个事务之间不存在相互关联关系。“ 时间 事务1 事务2 T1 开始事务 T2 操作1... T3 开始事务 T4 操作2... T5 递交事务 T6 回滚事务 定义中提到”挂起事务“这句话怎么理解? 所谓“挂起”指的是将当前线程使用的数据库连接,暂时保存起来不在使用。取而代之的是一个新的数据库库连接。 与挂起相对应的还有一个“恢复事务”,它们的操作是成对出现的。恢复就是将当前数据库连接释放掉,然后将以前挂起的那个数据库连接重新设为当前数据库连接。 REQUIRES_NEW 行为由于出现了“挂起”这样的操作