spring 总结

spring 事务传播

Spring 中的事务传播(Transaction Propagation)是用来定义一个事务方法(或事务控制边界)在调用另一个事务方法时,如何处理事务的行为规则。换句话说,它决定了事务方法在调用其他事务方法时,是否要加入已存在的事务,创建一个新的事务,或者以非事务方式执行。

在多个事务方法相互调用的场景中,事务传播行为决定了每个方法内部事务的执行方式。Spring 提供了多种事务传播行为,用于满足不同的业务需求和场景。

常见的事务传播行为包括:

  1. REQUIRED:如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新的事务。
  2. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起当前事务。
  3. NESTED:在嵌套事务中执行,如果不存在事务,则创建一个新的事务。
  4. SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务方式执行。
  5. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将其挂起。
  6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  7. MANDATORY:如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。

Spring Boot提供了TX控制的事务管理器,可以通过@Transactional注解来指定事务的传播行为。事务的传播行为定义了一个方法调用时所在的事务环境,包括事务的启动、提交和回滚等。

Spring Boot定义了7种事务传播行为:

  1. REQUIRED:如果当前上下文中存在事务,方法就在该事务中运行,否则就启动一个新的事务;

  2. SUPPORTS:如果当前上下文中存在事务,方法就在该事务中运行,否则就以非事务方式运行;

  3. MANDATORY:方法必须在一个已存在的事务中运行,否则会抛出异常;

  4. REQUIRES_NEW:方法总是启动一个新的事务,如果当前上下文中存在事务,就将其挂起;

  5. NOT_SUPPORTED:方法总是以非事务方式运行,如果当前上下文中存在事务,就将其挂起;

  6. NEVER:方法必须在非事务环境下运行,如果当前上下文中存在事务,就会抛出异常;

  7. NESTED:如果当前上下文中存在事务,则方法就在一个嵌套的事务中运行,否则就与REQUIRED行为一样。

通过注解@Transactional(propagation = Propagation.XXX)来指定事务的传播行为,其中XXX代表了上述的7种传播行为之一。例如:

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

这样就指定了doSomething方法的事务传播行为为REQUIRES_NEW,即无论当前是否存在事务,都会启动一个新的事务来执行该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值