spring事务传播方式有哪些
-
Spring事务传播方式包括:
-
REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认的传播方式。
-
SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。
-
MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起当前事务。
-
NOT_SUPPORTED:以非事务的方式执行,如果当前存在事务,则挂起当前事务。
-
NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在嵌套的事务中执行;如果当前没有事务,则创建一个新的事务。
这些传播方式可以通过在方法上添加
@Transactional(propagation = Propagation.XXX)注解来指定。其中,Propagation是org.springframework.transaction.annotation.Propagation枚举类型,XXX是具体的传播方式。1年前 -
-
Spring事务传播方式主要有以下几种:
-
REQUIRED(默认):如果当前存在事务,则加入事务,如果没有事务,则创建一个新的事务。该选项适合大多数场景,在该事务传播方式下,多个方法调用都可以在同一个事务中进行。
-
REQUIRES_NEW:每次都创建新的事务,如果当前存在事务,则将当前事务挂起。该选项适合需要在一个新的事务中执行的独立操作,可以确保每个方法都在一个独立的事务中执行。
-
SUPPORTS:如果当前存在事务,则加入事务,如果没有事务,则不使用事务。该选项适合在仅需要读取数据的操作中使用,不需要事务的支持。
-
NOT_SUPPORTED:如果当前存在事务,则将当前事务挂起,以非事务方式执行。该选项适合在一些不需要使用事务的操作中使用,比如读取操作。
-
NEVER:如果当前存在事务,则抛出异常。该选项适合在一些不能在事务中执行的操作中使用,比如一些敏感的操作。
需要注意的是,事务传播方式只能影响到通过代理调用的方法,而无法控制通过对象的内部方法调用。另外,事务传播行为只对被@Transactional注解标记的方法有效。
1年前 -
-
在Spring框架中,事务传播是指在一个方法调用过程中,获取或者创建一个事务的方式。Spring框架中定义了七种事务传播方式,可以根据具体的需求选择合适的方式。下面将分别介绍这七种事务传播方式及其使用场景。
-
REQUIRED:如果当前方法已经在一个事务中运行,则当前事务将被使用。如果当前方法没有在事务中运行,则会创建一个新的事务。该方式是默认方式。
使用场景:常用于业务操作,如果当前有事务则加入,如果没有事务则新建一个事务。 -
SUPPORTS:如果当前方法在一个事务中运行,则当前事务将被使用。如果当前方法没有在事务中运行,则该方法将在非事务环境中运行。
使用场景:常用于查询操作,不需要事务支持。 -
MANDATORY:如果当前方法已经在一个事务中运行,则当前事务将被使用。如果当前方法没有在事务中运行,则抛出异常。
使用场景:常用于要求方法在一个事务环境中运行的情况,如果没有事务则抛出异常。 -
REQUIRES_NEW:无论当前方法是否在一个事务中运行,都会创建一个新的事务。如果当前方法在一个事务中运行,则当前事务将被挂起。
使用场景:常用于需要独立事务的情况,即使外部方法存在事务也不受影响。 -
NOT_SUPPORTED:当前方法将在非事务环境中运行。如果当前方法在一个事务中运行,则当前事务将被挂起。
使用场景:常用于不需要事务支持且当前方法被事务干扰的情况。 -
NEVER:当前方法在非事务环境中运行。如果当前方法在一个事务中运行,则抛出异常。
使用场景:常用于要求方法不在事务环境中运行的情况,如果在事务中则抛出异常。 -
NESTED:如果当前方法在一个事务中运行,则该方法将在一个嵌套的事务中运行。如果当前方法没有在事务中运行,则行为与REQUIRED一样。
使用场景:常用于需要嵌套事务的情况,嵌套事务是外部事务的一部分,但是可以单独进行回滚。
以上是Spring框架中定义的七种事务传播方式,根据实际场景和需求选择合适的事务传播方式可以更好地管理和控制事务。
1年前 -