spring事务传播级别是什么

fiy 其他 31

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring事务传播级别是指在多个事务方法相互调用时,事务应该如何传播和管理的方式。Spring框架提供了七种事务传播级别,分别是:

    1. REQUIRED:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则创建一个新的事务。这是默认的传播级别。

    2. SUPPORTS:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则以非事务的方式执行。

    3. MANDATORY:必须在一个事务中运行,如果当前没有事务,则抛出异常。

    4. REQUIRES_NEW:总是创建一个新的事务,如果当前存在事务,则挂起当前事务。

    5. NOT_SUPPORTED:以非事务的方式运行,如果当前存在事务,则挂起当前事务。

    6. NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行,即创建一个保存点,在内部事务提交时,只有在最外层事务提交时才会真正提交。如果当前没有事务,则创建一个新的事务。

    每种传播级别在不同的场景下有不同的用途:

    • REQUIRED适用于大多数情况,确保调用的方法在一个事务中运行。如果不存在事务,则创建一个新的事务,如果存在事务,则加入到当前事务中。

    • REQUIRES_NEW适用于需要独立事务运行的方法,无论当前是否存在事务,都会创建一个新的事务。

    • SUPPORTS适用于不需要事务的方法,如果当前存在事务,则加入到当前事务中,如果没有事务,则以非事务的方式运行。

    • MANDATORY主要用于强制方法在一个事务中运行,如果当前没有事务,则抛出异常。

    • NOT_SUPPORTED和NEVER都是用于以非事务的方式运行方法,不同之处在于NOT_SUPPORTED会挂起当前事务,而NEVER会抛出异常。

    • NESTED适用于需要在嵌套事务中执行的方法,内部事务的提交和回滚只会影响到自己的保存点,只有最外层的事务提交时才会真正提交。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring事务的传播级别是用于定义在多个事务方法相互调用时,事务应该如何传播的规则。Spring框架为我们提供了多种事务传播级别,可以根据需求选择合适的级别。以下是Spring事务的传播级别:

    1. REQUIRED(默认):如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则创建一个新的事务。这是最常用的传播级别,适用于大多数情况。

    2. SUPPORTS:如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则以非事务的方式执行。该级别适用于对事务没有强依赖的方法。

    3. MANDATORY:如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则抛出异常。该级别适用于对事务有强依赖的方法。

    4. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将其挂起。该级别适用于需要独立事务的方法。

    5. NOT_SUPPORTED:无论当前是否存在事务,都以非事务的方式执行。如果当前存在事务,则将其挂起。该级别适用于对事务没有依赖的方法。

    6. NEVER:如果当前存在事务,则抛出异常;如果当前不存在事务,则以非事务的方式执行。该级别适用于对事务有强烈禁止的方法。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前不存在事务,则创建一个新的事务。嵌套事务是在当前事务内的一个独立的子事务,可以独立地提交或回滚。如果外部事务提交或回滚,则嵌套事务也会受到影响。

    以上是Spring事务的传播级别。根据不同的业务需求,选择适当的传播级别可以确保事务的正确执行和管理。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring事务传播级别是指在多个事务方法相互调用的情况下,控制各个事务方法之间如何进行事务的传播。Spring框架提供了多种事务传播级别,用于控制事务的行为和处理方式。

    Spring事务传播级别主要包括以下几种:

    1. REQUIRED(默认):如果当前存在一个事务,则加入该事务,如果当前没有事务,则创建一个新事务。该级别是最常用的级别,也是默认级别。

    2. SUPPORTS:如果当前存在一个事务,就加入该事务;如果当前没有事务,就以非事务的方式执行。

    3. MANDATORY:强制要求当前必须存在一个事务,如果不存在则抛出异常。

    4. REQUIRES_NEW:创建一个新事务,如果当前存在事务,则将当前事务挂起。

    5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。

    6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。

    根据不同的业务场景,选择合适的事务传播级别可以更好地处理事务。下面通过具体的操作流程进行讲解。

    设计一个业务场景如下:假设有两个方法A和B,方法A被事务管理,方法B没有被事务管理,其中A调用了B。现在我们需要根据不同的事务传播级别来控制事务的行为。

    1. REQUIRED级别:

      • 如果方法A和方法B都没有事务,则创建一个新的事务;
      • 如果方法A已经有事务,则方法B加入该事务;
      • 如果方法A没有事务,方法B有事务,则方法A创建一个新事务。
    2. SUPPORTS级别:

      • 如果方法A有事务,则方法B加入该事务;
      • 如果方法A没有事务,则方法B以非事务方式执行。
    3. MANDATORY级别:

      • 如果方法A有事务,则方法B加入该事务;
      • 如果方法A没有事务,则抛出异常。
    4. REQUIRES_NEW级别:

      • 不管方法A是否有事务,方法B都创建一个新的事务。
    5. NOT_SUPPORTED级别:

      • 不管方法A是否有事务,方法B都以非事务方式执行。
    6. NEVER级别:

      • 如果方法A有事务,则抛出异常;
      • 如果方法A没有事务,则方法B以非事务方式执行。
    7. NESTED级别:

      • 如果方法A有事务,则在嵌套事务中执行方法B;
      • 如果方法A没有事务,则方法B创建一个新的事务。

    通过控制事务传播级别,我们可以更好地管理和控制事务的行为,使其符合业务需求和预期的结果。不同的事务传播级别可以满足不同的业务场景,提供了更灵活的事务管理能力。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部