spring事务传播的几种方式?

65 阅读2分钟

Spring 事务传播(Transaction Propagation)是定义在事务方法被嵌套调用时,事务是如何传播的一种机制。Spring 提供了多种事务传播方式,可以通过 @Transactional 注解的 propagation 属性来指定。

以下是常见的 Spring 事务传播方式:

  1. REQUIRED

    • 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
    • 是默认的传播方式。
    @Transactional(propagation = Propagation.REQUIRED)
    public void requiredExample() {
        // ...
    }
    
  2. SUPPORTS

    • 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
    @Transactional(propagation = Propagation.SUPPORTS)
    public void supportsExample() {
        // ...
    }
    
  3. MANDATORY

    • 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
    @Transactional(propagation = Propagation.MANDATORY)
    public void mandatoryExample() {
        // ...
    }
    
  4. REQUIRES_NEW

    • 创建一个新的事务,如果当前存在事务,则将当前事务挂起。
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void requiresNewExample() {
        // ...
    }
    
  5. NOT_SUPPORTED

    • 以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void notSupportedExample() {
        // ...
    }
    
  6. NEVER

    • 以非事务方式执行操作,如果当前存在事务,则抛出异常。
    @Transactional(propagation = Propagation.NEVER)
    public void neverExample() {
        // ...
    }
    
  7. NESTED

    • 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
    @Transactional(propagation = Propagation.NESTED)
    public void nestedExample() {
        // ...
    }
    

  1. REQUIRED:

    • 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
    • 是默认的传播方式。
  2. SUPPORTS:

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

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

    • 创建一个新的事务,如果当前存在事务,则将当前事务挂起。
  5. NOT_SUPPORTED:

    • 以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
  6. NEVER:

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

    • 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。