Spring的事务传播机制

发布时间 2023-10-06 22:53:02作者: jishaleng

事务传播机制

方法A调用方法B,事务的传播机制主要针对被调用方(方法B)

传播行为 描述
required 默认,如果上下文中存在事务A,则事务B加入到事务A变成一个事务;不存在,则创建一个事务B
requires_new 如果上下文中存在事务A,则将上下文的事务A挂起,然后新建一个事务B (事务A的回滚不影响事务B的提交;事务B异常回滚,方法B作为被调用方会将异常抛给方法A,如果方法A捕获处理不会导致事务A回滚,没有捕获处理会导致事务A回滚),执行完新建的事务B后,恢复并执行上下文事务A;不存在事务A,则创建一个事务B
supports 如果上下文中存在事务A,则支持事务B加入事务A;不存在,则使用非事务方式执行方法B
not_supported 如果上下文中存在事务A,则将事务A挂起,然后以非事务的方式执行方法B;不存在,则以非事务方式执行方法B
mandatory 如果下上文不存在事务A,则事务B抛出异常;存在事务A,事务B加入到事务A中
never 如果上下文中存在事务A,则事务B抛出异常;不存在事务A,事务A和事务B以非事务方式执行方法B、A
nested 如果上下文中存在事务A,则新建一个A的子事务B,子事务B嵌套在事务A中执行 (事务A的回滚会导致事务B提交后回滚,事务B回滚且异常被捕获处理不影响事务A提交);不存在事务A,则创建一个事务B
@Transactional
public void transactionalA() {
    System.out.println("transactionalA");
    transactionalB();
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void transactionalB() {
    System.out.println("transactionalB");
}