spring中事务如何传递

不及物动词 其他 10

回复

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

    在Spring中,事务传递是通过在方法间调用时将事务进行传播。具体来说,当一个事务方法调用另一个事务方法时,通过配置事务的传播行为来确定事务应如何传递。

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

    1. REQUIRED:表示当前方法必须运行在一个事务中,如果当前没有事务,则创建一个新的事务;如果当前存在事务,就加入到当前事务中。

    2. SUPPORTS:表示当前方法可以在一个事务中运行,也可以在没有事务的情况下运行。

    3. MANDATORY:表示当前方法必须运行在一个事务中,如果当前不存在事务,就会抛出异常。

    4. REQUIRES_NEW:表示当前方法必须运行在一个新的事务中,如果当前存在事务,就将当前事务挂起。

    5. NOT_SUPPORTED:表示当前方法不应该运行在一个事务中,如果当前存在事务,就将当前事务挂起。

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

    7. NESTED:表示如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则会执行与REQUIRED相同的行为。

    通过在方法上添加@Transactional注解,并设置对应的传播行为,就可以实现事务的传递。例如:

    @Transactional(propagation = Propagation.REQUIRED)
    public void methodA() {
        // ...
        methodB();
        // ...
    }
    
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void methodB() {
        // ...
    }
    

    在上面的例子中,当methodA方法被调用时,如果当前没有事务,则会创建一个新的事务;然后调用methodB方法时,由于methodB设置了传播行为为REQUIRES_NEW,所以会挂起methodA的事务,并创建一个新的事务执行methodB;methodB执行完毕后,methodA的事务会恢复执行。

    总的来说,事务传递是通过配置事务的传播行为来实现的,可以根据具体的需求选择合适的传播行为来处理事务传递的问题。

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

    在Spring中,事务的传递方式有以下几种:

    1. 传播行为为REQUIRED(默认):如果方法A在事务上下文中运行,并且方法A调用了方法B,则方法B将在相同的事务中运行。如果没有事务上下文存在,则会为方法A和B创建一个新的事务。

    2. 传播行为为REQUIRES_NEW:如果方法A在事务上下文中运行,并且方法A调用了方法B,则方法A的事务将被挂起,并为方法B创建一个新的事务。方法B在自己的事务中运行完毕后,方法A的事务将会恢复。

    3. 传播行为为SUPPORTS:如果方法A在事务上下文中运行,并且方法A调用了方法B,则方法B会在方法A的事务中运行。如果没有事务上下文存在,则方法B将以非事务方式运行。

    4. 传播行为为NOT_SUPPORTED:如果方法A在事务上下文中运行,并且方法A调用了方法B,则方法B将以非事务方式运行。如果没有事务上下文存在,则方法B仍然以非事务方式运行。

    5. 传播行为为NEVER:如果方法A在事务上下文中运行,并且方法A调用了方法B,则方法B将以非事务方式运行。如果没有事务上下文存在,则方法B仍然以非事务方式运行。与NOT_SUPPORTED不同的是,在NEVER传播行为下,方法B被调用时如果存在事务上下文,则会抛出异常。

    以上是Spring中事务传递的几种方式,可以根据业务需求灵活选择适合的传播行为。通过适当的设置事务传播行为,可以确保方法之间的事务传递符合预期,从而保证数据一致性和事务的正确执行。

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

    在Spring中,事务是一种用于管理数据库事务的机制。事务是一组操作的单元,这些操作要么全部成功执行,要么全部回滚,保证数据的一致性和完整性。而事务的传递,是指在多个方法之间使用事务进行操作时,事务如何进行传递和管理。

    Spring中事务的传递方式主要有以下几种:

    1. PROPAGATION_REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。
    2. PROPAGATION_REQUIRES_NEW:创建一个新事务,并挂起当前事务(如果存在)。
    3. PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式进行操作。
    4. PROPAGATION_NOT_SUPPORTED:以非事务的方式进行操作,如果当前存在事务,则将该事务挂起。
    5. PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果没有事务,则抛出异常。
    6. PROPAGATION_NEVER:以非事务的方式进行操作,如果当前存在事务,则抛出异常。
    7. PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新事务。

    这些事务传播行为可以通过在方法上使用@Transactional注解进行设置。例如:

    @Transactional(propagation = Propagation.REQUIRED)
    public void methodA() {
        // ...
    }
    
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void methodB() {
        // ...
    }
    

    在上面的示例中,methodA使用默认的事务传播行为PROPAGATION_REQUIRED。如果当前存在事务,methodA将会加入该事务;如果当前没有事务,则会创建一个新事务。

    methodB则使用了PROPAGATION_REQUIRES_NEW事务传播行为。无论当前是否存在事务,methodB都会创建一个新的事务,并且将当前事务(如果存在)挂起。

    需要注意的是,当存在多个事务传播行为不同时,并且这些方法的调用关系是嵌套的时候,应该格外注意事务传递的问题,以免造成不必要的错误。因此,在设计事务传播行为时,要考虑到实际业务需求和方法调用的关系,选择适合的事务传播方式。

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

400-800-1024

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

分享本页
返回顶部