spring事务是如何传播的

fiy 其他 8

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring事务的传播指的是在多个事务中的方法被调用时,事务的行为是如何传播的。Spring框架为开发人员提供了一种灵活的事务管理机制,可以根据不同的业务需求和场景来配置事务的传播行为。下面将详细介绍Spring事务传播的几种方式。

    1. REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播方式,默认情况下Spring事务的传播行为就是REQUIRED。

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

    3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

    4. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务来执行。

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

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

    7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是作为外部事务的一部分,它有自己的保存点,可以对其进行回滚,但是外部事务的回滚会导致嵌套事务的回滚。

    Spring事务的传播行为可以通过@Transactional注解或者编程方式来配置。在@Transactional注解中可以使用propagation属性来指定事务的传播方式。例如:

    @Transactional(propagation = Propagation.REQUIRED)
    public void method1() {
    // 事务操作
    }

    总结来说,Spring事务的传播行为可以根据业务需求来进行配置,通过合理使用传播行为可以确保事务的一致性和准确性。在实际开发中,需要根据具体的业务场景来选择合适的传播方式。

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

    Spring事务的传播行为决定了在方法调用之间如何处理事务。Spring框架定义了7种事务传播行为,每种行为都有不同的规则和适用场景。下面是对Spring事务传播行为的详细解释:

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

    2. SUPPORTS:如果当前存在事务,则加入到当前事务中执行;如果当前没有事务,则以非事务方式执行。这种传播行为适用于不需要事务保证的方法,通常是查询方法。

    3. MANDATORY:如果当前存在事务,则加入到当前事务中执行;如果当前没有事务,则抛出异常。这种传播行为适用于必须在事务中运行的方法,如果没有事务,则会抛出异常。

    4. REQUIRES_NEW:创建一个新的事务,并将当前事务挂起。如果当前存在事务,则将其挂起,并在新的事务中执行。适用于需要独立的事务的方法,即使外层存在事务也不会受到影响。

    5. NOT_SUPPORTED:以非事务方式执行方法,如果当前存在事务,则将其挂起。适用于不需要事务保证的方法,且不希望有任何事务的影响。

    6. NEVER:以非事务方式执行方法,如果当前存在事务,则抛出异常。适用于必须在没有事务的情况下运行的方法,如果存在事务,则会抛出异常。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是一个独立的保存点,在嵌套事务中的操作可以回滚或提交,而不影响外层事务。适用于在方法内部需要有独立保存点的情况。

    因此,Spring事务的传播行为提供了灵活的事务管理机制,可以根据实际需求选择适合的传播行为。通过合理地使用事务传播行为,可以确保事务的正确执行和一致性。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring事务传播(Transaction Propagation)是指在多个事务方法之间如何传播事务的行为。在Spring框架中,有七种不同的事务传播行为,分别为:

    1. REQUIRED(默认):如果当前存在事务,则加入该事务中;如果当前没有事务,则创建一个新的事务。
    2. SUPPORTS:如果当前存在事务,则加入该事务中;如果当前没有事务,则以非事务方式执行。
    3. MANDATORY:如果当前存在事务,则加入该事务中;如果当前没有事务,则抛出异常。
    4. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果有)。
    5. NOT_SUPPORTED:以非事务方式执行,并挂起当前事务(如果有)。
    6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
    7. NESTED:如果当前存在事务,则嵌套在当前事务中执行;如果当前没有事务,则创建一个新的事务。

    下面分别对每种事务传播行为进行详细说明:

    1. REQUIRED:
      在默认的事务传播行为中,如果方法A在一个事务中调用方法B,并且方法B使用REQUIRED传播行为,则方法B会加入方法A所在的事务中。如果方法A没有事务,那么方法B会创建一个新的事务。

    2. SUPPORTS:
      如果方法A在一个事务中调用方法B,而方法B使用SUPPORTS传播行为,则方法B会加入方法A所在的事务中。如果方法A没有事务,那么方法B会以非事务方式执行。

    3. MANDATORY:
      如果方法A在一个事务中调用方法B,而方法B使用MANDATORY传播行为,则方法B会加入方法A所在的事务中。如果方法A没有事务,那么会抛出异常。

    4. REQUIRES_NEW:
      如果方法A在一个事务中调用方法B,而方法B使用REQUIRES_NEW传播行为,则方法B会创建一个新的事务,并挂起方法A所在的事务。

    5. NOT_SUPPORTED:
      如果方法A在一个事务中调用方法B,而方法B使用NOT_SUPPORTED传播行为,则方法B会以非事务方式执行,并挂起方法A所在的事务。

    6. NEVER:
      如果方法A在一个事务中调用方法B,而方法B使用NEVER传播行为,则方法B会以非事务方式执行。如果方法A存在事务,那么会抛出异常。

    7. NESTED:
      如果方法A在一个事务中调用方法B,而方法B使用NESTED传播行为,则方法B会嵌套在方法A的事务中执行。如果方法A没有事务,那么方法B会创建一个新的事务。

    以上是Spring事务传播行为的详细解释。根据实际业务需求和事务的特性,选择合适的事务传播行为能够有效管理事务的边界和范围,保证数据的一致性和完整性。

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

400-800-1024

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

分享本页
返回顶部