spring事务传播属性有能哪些
-
Spring事务传播属性是用来控制事务在同一个应用中多个方法调用时的行为。在Spring中,事务传播属性有以下几种:
-
REQUIRED(默认值):如果当前存在事务,则加入该事务,如果没有事务,则创建一个新事务。在该传播属性下,如果方法抛出异常,则事务会回滚。
-
SUPPORTS:如果当前存在事务,则加入该事务,如果没有事务,则以非事务的方式执行。在该传播属性下,方法不会开启新事务,也不会回滚。
-
MANDATORY:如果当前存在事务,则加入该事务,如果没有事务,则抛出异常。在该传播属性下,方法必须在事务内部被调用。
-
REQUIRES_NEW:不管当前是否存在事务,都创建一个新事务,并在该事务内执行方法。如果当前存在事务,则将它挂起。在该传播属性下,方法会开启新事务,如果方法抛出异常,则新事务回滚,而老事务不受影响。
-
NOT_SUPPORTED:以非事务的方式执行方法,如果当前存在事务,则将它挂起。在该传播属性下,方法并不关心当前是否存在事务,它会以非事务的方式执行。
-
NEVER:以非事务的方式执行方法,如果当前存在事务,则抛出异常。在该传播属性下,方法不能在事务内部被调用。
-
NESTED:如果当前存在事务,则在一个嵌套的事务内执行方法;如果没有事务,则会创建一个新事务。在该传播属性下,如果方法抛出异常,则只会回滚当前的嵌套事务,而不会回滚外层事务。
以上是Spring事务传播属性的常用值,通过合理地选择传播属性,可以实现事务的控制和管理。在实际开发中,根据具体的业务需求和场景,选择适合的传播属性来保证数据的一致性和完整性。
1年前 -
-
Spring事务传播属性是用来指定一段代码在存在事务的情况下如何加入到已有的事务中的属性。Spring事务传播属性有以下几种:
-
REQUIRED:默认的传播属性。如果当前存在事务,则加入到该事务中执行;如果当前没有事务,则创建一个新的事务。这是最常用的传播属性。
-
SUPPORTS:如果当前存在事务,则加入到该事务中执行;如果当前没有事务,则以非事务方式执行。
-
MANDATORY:必须存在事务,如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:不管当前存不存在事务,都创建一个新的事务。如果当前存在事务,则将当前事务挂起。
-
NOT_SUPPORTED:不支持事务,即以非事务方式执行。如果当前存在事务,则将当前事务挂起。
-
NEVER:不能有事务,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则开启一个嵌套事务并执行;如果当前没有事务,则创建一个新的事务。嵌套事务可以看作是当前事务的子事务,有自己的保存点,可以进行独立提交或回滚。
这些事务传播属性可以在使用
@Transactional注解时进行指定,也可以在配置文件中进行配置。根据实际需求,选择合适的事务传播属性可以保证代码的正确性和一致性。1年前 -
-
Spring事务传播属性是用于控制事务在方法调用过程中如何传播和合并的属性。Spring框架定义了七种事务传播属性,分别为:
-
REQUIRED(默认值):如果当前存在事务,则加入该事务执行;如果当前没有事务,则创建一个新事务执行。该传播属性最常用,保证方法在一个事务内运行,如果没有事务则创建。
-
REQUIRES_NEW:无论当前是否存在事务,都会将当前事务挂起,创建一个新事务执行该方法。如果父方法已经有事务在进行,则会暂停,并创建一个新事务,新事务会独立于原有事务。
-
SUPPORTS:不强制要求方法在事务中执行,如果存在事务,就加入该事务执行;如果没有事务,则以非事务的方式执行。该传播属性适用于不需要事务支持的方法,但仍然可以参与到父级方法的事务中。
-
NOT_SUPPORTED:不强制要求方法在事务中执行,如果存在事务,则将当前事务挂起,并以非事务的方式执行方法。该传播属性适用于不需要事务支持的方法,且不会参与到父级方法的事务中。
-
MANDATORY:强制方法在一个事务中执行,如果当前没有事务,则抛出异常。该传播属性适用于需要明确指定方法在事务中执行的场景。
-
NEVER:强制方法不能在事务中执行,如果当前存在事务,则抛出异常。该传播属性适用于不希望方法在事务中执行的场景。
-
NESTED:如果当前存在事务,则在该事务的嵌套事务中执行该方法;如果当前没有事务,则创建一个新事务执行。该传播属性适用于希望将方法的执行作为当前事务的子事务来处理的场景。
Spring事务传播属性可以通过在@Transactional注解中指定来使用,如:
@Transactional(propagation = Propagation.REQUIRED)
public void method() {
//…
}除了在注解中指定事务传播属性外,Spring也支持在XML配置文件中指定事务传播属性。例如:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
tx:attributes
<tx:method name="methodName" propagation="REQUIRED"/>1年前 -