spring事务传播是什么

不及物动词 其他 31

回复

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

    Spring事务传播是指在多个事务方法相互调用的过程中,事务是如何在这些方法之间传播和管理的机制。在一个事务方法内部调用另一个事务方法时,可以选择不同的事务传播行为来决定事务的行为和范围。

    Spring中定义了7种事务传播行为,分别是:

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

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

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

    4. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果存在)。

    5. NOT_SUPPORTED:以非事务方式执行,并挂起当前事务(如果存在)。

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

    7. NESTED:如果当前存在事务,则在当前事务内嵌套一个子事务;如果当前没有事务,则创建一个新的事务。如果子事务失败,则回滚子事务并回滚父事务,如果父事务失败,则回滚整个事务。

    这些事务传播行为可以通过@Transactional注解来声明在方法上,也可以通过XML配置文件来声明在AOP切面中的事务通知中。

    事务传播机制需要根据具体的业务需求来选择合适的传播行为。使用不当可能会导致数据一致性或性能问题,因此在设计事务时需要仔细考虑。

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

    Spring事务传播(Transaction Propagation)是指在一个事务方法调用另一个事务方法时,如何处理事务的传播和边界的扩展问题。

    1. REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
    2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。
    3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
    4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
    5. NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则将当前事务挂起。

    事务传播设置可以通过在方法上使用@Transactional注解来指定,也可以通过在XML配置文件中进行配置。事务传播设置可以根据实际需求来灵活调整,以确保事务的一致性和可靠性。

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

    Spring事务传播是指在一个事务方法中调用另一个事务方法时,两个事务方法之间如何进行事务的传播和管理。通过事务传播属性,我们可以控制事务方法的行为和影响范围。

    Spring框架提供了七种事务传播行为,分别是:

    1. REQUIRED:如果当前存在事务,则加入该事务。如果不存在事务,则创建一个新的事务。这是默认的传播行为。

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

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

    4. REQUIRES_NEW:创建一个新事务,并挂起当前的事务(如果存在)。

    5. NOT_SUPPORTED:以非事务方式执行,并挂起当前的事务(如果存在)。

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

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

    下面针对每种事务传播行为,详细解释其操作流程和具体使用场景。

    1. REQUIRED:如果当前存在事务,则加入该事务。如果不存在事务,则创建一个新的事务。这是默认的传播行为。

    当一个方法被标记为REQUIRED传播行为时,它将会依赖于一个已经存在的事务,如果当前事务不存在,则会创建一个事务。如果当前存在事务,则会根据事务传播行为决定具体的操作。如果内部方法执行出现异常,会导致整个事务回滚。

    使用场景:在多个方法中,如果希望它们在同一个事务中运行,可以将它们都标记为REQUIRED传播行为。

    1. SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务方式执行。

    SUPPORTS传播行为意味着当前方法将以事务之外的方式执行。如果当前事务存在,则当前方法将加入该事务,成为该事务的一部分。如果当前事务不存在,则当前方法将以非事务方式执行。如果内部方法执行出现异常,不会影响事务的提交。

    使用场景:如果一个方法需要在事务中执行,但是又不希望它自己开启一个新的事务,可以使用SUPPORTS传播行为。

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

    MANDATORY传播行为要求当前方法必须在一个事务中被调用,如果当前事务存在,则当前方法将加入该事务。如果当前事务不存在,则将抛出异常。

    使用场景:一般用于需要确保方法在事务上下文中被调用时,使用MANDATORY传播行为。

    1. REQUIRES_NEW:创建一个新事务,并挂起当前的事务(如果存在)。

    REQUIRES_NEW传播行为会为当前方法创建一个新的事务,并且会挂起当前事务(如果存在)直到新事务完成。如果内部方法执行出现异常,会导致新事务回滚,而外部事务不受影响。

    使用场景:当一个方法需要使用独立的事务,并且希望与外部方法的事务完全隔离时,可以使用REQUIRES_NEW传播行为。

    1. NOT_SUPPORTED:以非事务方式执行,并挂起当前的事务(如果存在)。

    NOT_SUPPORTED传播行为将当前方法以非事务方式执行,并且会挂起当前事务(如果存在)。即使外部存在事务,当前方法也不会参与其中。如果内部方法执行出现异常,不会影响事务的提交。

    使用场景:当一个方法需要在非事务中执行,并且希望与外部方法的事务完全隔离时,可以使用NOT_SUPPORTED传播行为。

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

    NEVER传播行为将当前方法以非事务方式执行,但是如果当前事务存在,则会抛出异常。

    使用场景:当一个方法需要在非事务中执行,但是不希望在有事务的情况下执行时,可以使用NEVER传播行为。

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

    NESTED传播行为在一个已经存在事务的内部创建一个嵌套事务。如果当前不存在事务,则创建一个新的事务。嵌套事务是外部事务的一部分,它们可以分别提交或回滚,但是最终的提交或回滚操作会在最外层事务上进行。

    使用场景:当一个方法需要在一个嵌套事务中执行,并且希望与外部事务一同提交或回滚时,可以使用NESTED传播行为。

    总结:

    事务传播行为是Spring框架中非常重要的一个概念,通过控制事务的传播行为,我们可以灵活地管理方法中的事务。每种传播行为都有其适用的场景,我们在使用事务时需要根据实际情况选择合适的传播行为来实现业务需求。

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

400-800-1024

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

分享本页
返回顶部