跳到主要内容

简述Spring事务中有哪几种事务传播行为?

参考答案:

Spring事务的传播行为是指当一个方法被另一个方法调用时,如何使用事务。这些传播行为定义了当存在事务、不存在事务、或者发生异常时应该如何处理。Spring框架支持7种事务传播行为,这些行为可以分为三类:创建型、非事务型和报错型。

  1. 创建型:

    • 嵌套创建(NESTED):如果当前存在事务,则嵌套创建一个新的事务,如果当前不存在事务,则创建一个新的事务。
    • 挂起创建(REQUIRES_NEW):如果当前存在事务,则挂起当前事务,创建一个新的事务。如果当前不存在事务,则创建一个新的事务。
    • 加入创建(REQUIRED):如果当前存在事务,则加入该事务。如果当前不存在事务,则创建一个新的事务。
  2. 非事务型:

    • 加入非事务(SUPPORTS):如果当前存在事务,则加入该事务。如果当前不存在事务,则以非事务方式执行。
    • 挂起非事务(NOT_SUPPORTED):如果当前存在事务,则挂起当前事务,以非事务方式执行。如果当前不存在事务,则以非事务方式执行。
  3. 报错型:

    • 存在报错(NEVER):如果当前存在事务,则抛出异常。如果当前不存在事务,则以非事务方式执行。
    • 不存在报错(MANDATORY):如果当前存在事务,则加入该事务。如果当前不存在事务,则抛出异常。

这些传播行为可以通过在方法上添加@Transactional注解,并使用propagation属性来指定。例如,@Transactional(propagation = Propagation.REQUIRED)表示使用REQUIRED传播行为。

这些传播行为的选择应根据具体的业务需求和场景来决定。例如,如果一个方法的执行必须在事务中进行,但不需要独立创建事务,那么可以选择REQUIRED传播行为。如果一个方法的执行不需要在事务中进行,或者可以在非事务环境中执行,那么可以选择SUPPORTS或NOT_SUPPORTED传播行为。