【Spring】Spring事务传播行为类型(满足一切你想获得的知识)

什么是事务传播行为

事务传播行为是为了解决业务层方法之间互相调用的事务问题

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。

行为类型的种类都有哪些

Propagation 是 Spring 事务传播行为(propagation behavior)的枚举类型,用于定义事务方法之间的事务传播方式。以下是 Propagation 枚举中的所有取值以及对应的含义和示例:

1、REQUIRED(默认值):

        如果当前存在事务,则加入该事务;如果没有事务,则新建一个事务。

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

@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
    // 执行业务逻辑
}

 2、SUPPORTS

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

@Transactional(propagation = Propagation.SUPPORTS)
public void methodA() {
    // ...
}

@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
    // 执行业务逻辑
}

3、MANDATORY:

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

@Transactional(propagation = Propagation.MANDATORY)
public void methodA() {
    // ...
}

@Transactional(propagation = Propagation.MANDATORY)
public void methodB() {
    // 执行业务逻辑
}

4、REQUIRES_NEW:

        无论当前是否存在事务,都新建一个独立的事务。

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

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
    // 执行业务逻辑
}

5、NOT_SUPPORTED

        以非事务的方式执行,如果当前存在事务,则挂起该事务。

java
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void methodA() {
    // ...
}

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void methodB() {
    // 执行业务逻辑
}

6、NEVER

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

@Transactional(propagation = Propagation.NEVER)
public void methodA() {
    // ...
}

@Transactional(propagation = Propagation.NEVER)
public void methodB() {
    // 执行业务逻辑
}

7、NESTED

        如果当前存在事务,则在嵌套事务中执行;如果没有事务,则新建一个事务。嵌套事务是依赖于外部事务的。

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

@Transactional(propagation = Propagation.NESTED)
public void methodB() {
    // 执行业务逻辑
}

你可能感兴趣的:(spring,java,数据库)