什么是spring的事物传播

不及物动词 其他 24

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring的事务传播是指在多个事务参与的环境下,事务如何进行传播和协调的机制。

    在使用Spring进行事务管理时,一个方法可能会调用其他方法,这些方法可能会有不同的事务配置。事务传播机制定义了在这种情况下事务应该如何传播和处理。

    Spring框架定义了7种事务传播行为:

    1. REQUIRED(默认):如果当前已经存在一个事务,该方法就在这个事务内执行。如果当前没有事务,则创建一个新的事务。

    2. SUPPORTS:如果当前已经存在一个事务,该方法就在这个事务内执行。如果当前没有事务,则不会创建新的事务。

    3. MANDATORY:该方法必须在一个已经存在的事务中执行,否则会抛出异常。

    4. REQUIRES_NEW:该方法会创建一个新的事务,并挂起当前事务(如果存在)。当该方法执行结束后,再恢复之前的事务。

    5. NOT_SUPPORTED:该方法将不会在事务内执行。如果当前已经存在一个事务,则挂起该事务。

    6. NEVER:该方法不允许在事务内执行。如果当前已经存在一个事务,则会抛出异常。

    7. NESTED:如果当前已经存在一个事务,则该方法在嵌套事务内执行。如果当前没有事务,则会创建一个新的事务。

    事务传播机制的选择要根据具体场景进行决策。合适的事务传播行为可以确保事务的正确性和一致性,提高系统的可靠性和性能。

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

    Spring的事务传播(Transaction Propagation)是指在多个事务方法相互调用的情况下,事务应该如何进行传播和处理的一种机制。事务传播定义了事务运行的边界以及事务方法之间的关系。

    1. REQUIRED(默认):如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入到这个事务中。这是最常见的传播行为,也是最常用的。如果外部有事务存在,则当前方法会被嵌套在这个外部事务中,作为一个独立的子事务执行;否则会创建一个新的事务。

    2. SUPPORTS:如果当前存在事务,则加入到事务中执行;如果当前没有事务,则以非事务的方式执行。这种传播行为适用于不需要事务支持的方法,如果有事务存在,则直接加入该事务,如果没有事务存在,则以非事务方式执行。

    3. MANDATORY:如果当前存在事务,则加入到事务中执行;如果当前没有事务,则抛出异常。这种传播行为表示当前方法必须在一个事务中进行执行,如果没有事务存在则抛出异常。

    4. REQUIRES_NEW:无论是否存在事务,都创建一个新的事务。如果外部有事务存在,则将外部事务挂起,执行当前方法的事务,当前方法事务执行完成后,再恢复外部事务的执行。这种传播行为会创建一个新事务,如果外部有事务,则将当前方法事务与外部事务分离,互不影响。

    5. NOT_SUPPORTED:以非事务的方式执行,如果当前存在事务,则将当前事务挂起,直到当前方法执行完成后,再恢复事务的执行。这种传播行为表示当前方法不应该以事务方式执行,如果存在事务则将其挂起。

    事务传播的选择取决于业务需求和事务操作的特性。通过合理选择事务传播机制,可以保证事务的一致性和可靠性,确保数据一致性,并提高系统的性能。

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

    Spring的事务传播意味着在一个事务范围内执行的操作在其他事务中的可见性和影响的控制。当一个方法被标记为事务性时,其事务传播属性定义了该方法调用其他事务方法时,事务应该如何进行传播和管理。

    Spring提供了多种事务传播属性,具体如下:

    1. REQUIRED(默认):如果当前存在一个事务,则该方法在该事务中运行。否则,它会创建一个新的事务。

    2. SUPPORTS:如果当前存在一个事务,该方法将在该事务中运行。如果没有当前事务,则在没有事务的环境中运行。

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

    4. REQUIRES_NEW:该方法总是会创建一个新的事务。如果当前存在事务,则暂停当前事务并创建一个新的事务。

    5. NOT_SUPPORTED:该方法不应在一个事务中运行。如果当前存在事务,则暂停当前事务。

    6. NEVER:该方法不应在一个事务中运行。如果当前存在事务,则抛出异常。

    7. NESTED:如果当前存在一个事务,则该方法在嵌套事务中运行。如果没有当前事务,则按REQUIRED属性行为执行。

    不同的事务传播属性适用于不同的场景:

    • REQUIRED:当一个方法需要一个事务的支持,并且如果当前已经有一个事务在运行,该方法将会加入到当前事务中。

    • REQUIRES_NEW:当一个方法需要一个事务的支持,并且需要一个全新的独立事务去处理。

    • SUPPORTS:当一个方法可能需要或不需要一个事务的支持,具体取决于当前是否已经有事务存在。

    • NOT_SUPPORTED:当一个方法绝对不需要一个事务的支持,即使当前已经有事务存在。

    • MANDATORY:当一个方法必须在一个已经存在的事务中运行,否则将会抛出异常。

    • NEVER:当一个方法绝对不能在一个事务中运行,否则将会抛出异常。

    • NESTED:当一个方法需要一个嵌套的事务支持,而且这个事务是当前事务的一部分。

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

400-800-1024

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

分享本页
返回顶部