spring传播机制有什么

worktile 其他 24

回复

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

    Spring框架的传播机制主要包括事务的传播行为和异常的传播行为。

    在事务的传播行为方面,Spring提供了多种传播行为供开发者选择,包括:

    1. REQUIRED:如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,也是默认的传播行为。
    2. SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式执行。
    3. MANDATORY:如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。
    4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
    5. NOT_SUPPORTED:以非事务的方式执行,如果当前存在事务,则将当前事务挂起。
    6. NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
    7. NESTED:如果当前存在事务,则在当前事务的嵌套事务中执行,如果当前没有事务,则创建一个新的事务。这是一个嵌套事务,它是基于保存点(Savepoint)的,可以回滚部分操作。

    在异常的传播行为方面,Spring提供了两种方式:默认情况下,Spring只会对RuntimeException及其子类进行事务回滚,对于Checked Exception,Spring不会触发事务回滚;开发者也可以通过设置rollbackFor属性来手动指定需要回滚的异常类型。

    以上就是Spring框架中的传播机制,通过设置不同的传播行为和异常传播行为,可以灵活地控制事务的行为。

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

    Spring的传播机制是指在方法调用期间,事务如何在不同的方法之间传播和管理。Spring提供了多种传播机制,以满足不同的业务需求。

    1. REQUIRED传播机制:默认的传播机制。如果当前存在事务,就加入当前事务;如果当前没有事务,就创建一个新事务。适合大多数的业务场景,确保方法总是在一个事务中执行。

    2. SUPPORTS传播机制:如果当前存在事务,就加入当前事务;如果当前没有事务,就以非事务方式执行。适用于不需要事务支持的方法,可以在有事务的环境中执行,也可以在没有事务的环境中执行。

    3. MANDATORY传播机制:必须在一个事务中执行,如果当前没有事务,则抛出异常。适用于需要在事务中执行的方法,如果当前没有事务,则抛出异常。

    4. REQUIRES_NEW传播机制:总是创建一个新的事务,如果当前存在事务,则将当前事务挂起。适用于需要独立的事务的方法,可以在一个独立的事务中执行,不受外部事务的影响。

    5. NOT_SUPPORTED传播机制:以非事务方式执行方法,如果当前存在事务,则将当前事务挂起。适用于不需要事务支持的方法,可以在没有事务的环境中执行,不受外部事务的影响。

    除了以上几种传播机制,Spring还提供了NEVER传播机制和NESTED传播机制。

    NEVER传播机制:必须以非事务方式执行,如果当前存在事务,则抛出异常。

    NESTED传播机制:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新事务。嵌套事务是父事务的一部分,并且可以独立提交或回滚。如果父事务回滚,则嵌套事务也会回滚,但如果嵌套事务回滚,则不会影响父事务的提交。适用于需要独立提交或回滚的方法。

    通过合理选择传播机制,可以确保事务的正确处理,提高系统的可靠性和性能。在实际应用中,需要根据具体业务需求选择合适的传播机制。

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

    Spring的传播机制是指在事务管理中,如果一个方法调用了另一个方法,并且这两个方法都被事务管理器管理,则需要确定事务应该如何在这两个方法之间传播。Spring提供了多种传播机制来满足不同的业务需求。

    Spring的传播机制包括以下几种:

    1. REQUIRED:如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。这是默认的传播机制。当方法A调用方法B时,如果方法B存在事务,则方法A和方法B共享同一个事务,如果方法B不存在事务,则为方法B创建一个新的事务。

    2. SUPPORTS:如果当前存在事务,则加入该事务,如果不存在事务,则以非事务的方式运行。当方法A调用方法B时,如果方法B存在事务,则方法A和方法B共享同一个事务,如果方法B不存在事务,则以非事务的方式运行。

    3. MANDATORY:如果当前存在事务,则加入该事务,如果不存在事务,则抛出异常。当方法A调用方法B时,要求方法B必须在一个事务内部被调用,如果方法A没有事务,则抛出异常。

    4. REQUIRES_NEW:如果当前存在事务,则挂起该事务,并创建一个新的事务,如果不存在事务,则创建一个新的事务。当方法A调用方法B时,无论方法A是否存在事务,方法B都会创建一个新的事务,方法B的事务和方法A的事务是相互独立的。

    5. NOT_SUPPORTED:以非事务的方式运行,并挂起当前事务(如果存在)。当方法A调用方法B时,无论方法A是否存在事务,方法B都会以非事务方式运行,并挂起方法A的事务。

    6. NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。当方法A调用方法B时,要求方法B不能在事务内部被调用,如果方法A存在事务,则抛出异常。

    7. NESTED:如果当前存在事务,则在一个嵌套事务中执行,如果不存在事务,则创建一个新的事务。方法B的事务是方法A事务的子事务,方法B的事务可以独立于方法A的事务进行提交或回滚。如果方法A的事务回滚,则方法B的事务也会被回滚;如果方法B的事务回滚,则只会回滚方法B的事务,不影响方法A的事务。

    这些传播机制可以在@Transactional注解或XML配置文件中定义。通过选择合适的传播机制,可以实现对事务的精确控制,保证数据的一致性和可靠性。

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

400-800-1024

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

分享本页
返回顶部