Spring事务的传播行为

2024 年 8 月 17 日 星期六(已编辑)
9
AI 生成的摘要

Spring事务的传播行为

事务传播

事务传播的几种情况

序号事务的传播机制说明备注
1required如果当前存在事务,就加入该事务。 如果当前没有事务,就创建一个新事务。 这是最常用的设置。只创建一个事务。
2requires_new不管是否存在事务,都创建一个新的、自己的事务。老事务先挂起,再创建新事务新事务 执行完并提交,接着,继续执行 老事务最后提交。1、每次都创建一个新的事务。 2、创建 新事务 前,老事务 先挂起。 3、先执行的方法后提交事务,后执行的方法先提交事务。 4、老事务 的回滚,不会影响 新事务 的提交。
3nested如果当前存在事务,则 嵌套事务与外面事务使用同一事务,不同的是 嵌套内部开启一个新的保存点( savepoint ),执行有两种情况: (1)当嵌套内部 发生回滚,不影响外面事务的正常提交。 (2)当外面事务 发生回滚,则嵌套内的事务要回滚。 (3)未发生异常时,则嵌套内的事务和外部事务一起,一个整体提交。如果当前没有事务,则执行与 required 类似的操作。皮尚在,毛被烧掉。 皮之不存,毛将焉附。
4supports支持当前事务。 如果当前存在事务,就加入该事务, 如果当前不存在事务,就以非事务执行。supports 不会创建事务。
5not_supported不支持事务。 如果当前存在事务,就把当前事务 挂起。 如果当前没有事务,就以非事务执行。
6mandatory强制、必须使用事务。 如果当前 已经存在事务,就加入该事务, 如果当前不存在事务,就 抛出异常1、mandatory 不会创建事务。 2、mandatory 执行的前提是已经存在事务。
7never禁止事务 。 如果当前存在事务,则 抛出异常, 如果当前没有事务,以非事务方式执行,必须在一个没有事务中执行,否则报错。

事务传播的几种情况理解

行为类型
有就加入,没有就算了supports
外面有没有都要是新事务requires_new
外面有就加入,没有就新事务required
外面有就加入,保存点加入,没有就新事物nested
不要事务,外面有先挂起not_supported
要求外面有事务(不满足异常)mandatory
要求外面没有事务(不满足异常)mandatory

线程绑定(同步管理)

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...