简述Spring事务中有哪几种事务传播行为?
参考答案:
Spring事务的传播行为是指当一个方法被另一个方法调用时,如何使用事务。这些传播行为定义了当存在事务、不存在事务、或者发生异常时应该如何处理。Spring框架支持7种事务传播行为,这些行为可以分为三类:创建型、非事务型和报错型。
-
创建型:
- 嵌套创建(NESTED):如果当前存在事务,则嵌套创建一个新的事务,如果当前不存在事务,则创建一个新的事务。
- 挂起创建(REQUIRES_NEW):如果当前存在事务,则挂起当前事务,创建一个新的事务。如果当前不存在事务,则创建一个新的事务。
- 加入创建(REQUIRED):如果当前存在事务,则加入该事务。如果当前不存在事务,则创建一个新的事务。
-
非事务型:
- 加入非事务(SUPPORTS):如果当前存在事务,则加入该事务。如果当前不存在事务,则以非事务方式执行。
- 挂起非事务(NOT_SUPPORTED):如果当前存在事务,则挂起当前事务,以非事务方式执行。如果当前不存在事务,则以非事务方式执行。
-
报错型:
- 存在报错(NEVER):如果当前存在事务,则抛出异常。如果当前不存在事务,则以非事务方式执行。
- 不存在报错(MANDATORY):如果当前存在事务,则加入该事务。如果当前不存在事务,则抛出异常。
这些传播行为可以通过在方法上添加@Transactional
注解,并使用propagation
属性来指定。例如,@Transactional(propagation = Propagation.REQUIRED)
表示使用REQUIRED传播行为。
这些传播行为的选择应根据具体的业务需求和场景来决定。例如,如果一个方法的执行必须在事务中进行,但不需要独立创建事务,那么可以选择REQUIRED传播行为。如果一个方法的执行不需要在事务中进行,或者可以在非事务环境中执行,那么可以选择SUPPORTS或NOT_SUPPORTED传播行为。