spring事务传播级别是什么
-
Spring事务传播级别是指在多个事务方法相互调用时,事务应该如何传播和管理的方式。Spring框架提供了七种事务传播级别,分别是:
-
REQUIRED:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则创建一个新的事务。这是默认的传播级别。
-
SUPPORTS:如果当前存在事务,则加入到当前事务中,如果当前没有事务,则以非事务的方式执行。
-
MANDATORY:必须在一个事务中运行,如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:总是创建一个新的事务,如果当前存在事务,则挂起当前事务。
-
NOT_SUPPORTED:以非事务的方式运行,如果当前存在事务,则挂起当前事务。
-
NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在嵌套事务中执行,即创建一个保存点,在内部事务提交时,只有在最外层事务提交时才会真正提交。如果当前没有事务,则创建一个新的事务。
每种传播级别在不同的场景下有不同的用途:
-
REQUIRED适用于大多数情况,确保调用的方法在一个事务中运行。如果不存在事务,则创建一个新的事务,如果存在事务,则加入到当前事务中。
-
REQUIRES_NEW适用于需要独立事务运行的方法,无论当前是否存在事务,都会创建一个新的事务。
-
SUPPORTS适用于不需要事务的方法,如果当前存在事务,则加入到当前事务中,如果没有事务,则以非事务的方式运行。
-
MANDATORY主要用于强制方法在一个事务中运行,如果当前没有事务,则抛出异常。
-
NOT_SUPPORTED和NEVER都是用于以非事务的方式运行方法,不同之处在于NOT_SUPPORTED会挂起当前事务,而NEVER会抛出异常。
-
NESTED适用于需要在嵌套事务中执行的方法,内部事务的提交和回滚只会影响到自己的保存点,只有最外层的事务提交时才会真正提交。
1年前 -
-
Spring事务的传播级别是用于定义在多个事务方法相互调用时,事务应该如何传播的规则。Spring框架为我们提供了多种事务传播级别,可以根据需求选择合适的级别。以下是Spring事务的传播级别:
-
REQUIRED(默认):如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则创建一个新的事务。这是最常用的传播级别,适用于大多数情况。
-
SUPPORTS:如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则以非事务的方式执行。该级别适用于对事务没有强依赖的方法。
-
MANDATORY:如果当前存在事务,则加入到当前事务中;如果当前不存在事务,则抛出异常。该级别适用于对事务有强依赖的方法。
-
REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将其挂起。该级别适用于需要独立事务的方法。
-
NOT_SUPPORTED:无论当前是否存在事务,都以非事务的方式执行。如果当前存在事务,则将其挂起。该级别适用于对事务没有依赖的方法。
-
NEVER:如果当前存在事务,则抛出异常;如果当前不存在事务,则以非事务的方式执行。该级别适用于对事务有强烈禁止的方法。
-
NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前不存在事务,则创建一个新的事务。嵌套事务是在当前事务内的一个独立的子事务,可以独立地提交或回滚。如果外部事务提交或回滚,则嵌套事务也会受到影响。
以上是Spring事务的传播级别。根据不同的业务需求,选择适当的传播级别可以确保事务的正确执行和管理。
1年前 -
-
Spring事务传播级别是指在多个事务方法相互调用的情况下,控制各个事务方法之间如何进行事务的传播。Spring框架提供了多种事务传播级别,用于控制事务的行为和处理方式。
Spring事务传播级别主要包括以下几种:
-
REQUIRED(默认):如果当前存在一个事务,则加入该事务,如果当前没有事务,则创建一个新事务。该级别是最常用的级别,也是默认级别。
-
SUPPORTS:如果当前存在一个事务,就加入该事务;如果当前没有事务,就以非事务的方式执行。
-
MANDATORY:强制要求当前必须存在一个事务,如果不存在则抛出异常。
-
REQUIRES_NEW:创建一个新事务,如果当前存在事务,则将当前事务挂起。
-
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
-
NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。
根据不同的业务场景,选择合适的事务传播级别可以更好地处理事务。下面通过具体的操作流程进行讲解。
设计一个业务场景如下:假设有两个方法A和B,方法A被事务管理,方法B没有被事务管理,其中A调用了B。现在我们需要根据不同的事务传播级别来控制事务的行为。
-
REQUIRED级别:
- 如果方法A和方法B都没有事务,则创建一个新的事务;
- 如果方法A已经有事务,则方法B加入该事务;
- 如果方法A没有事务,方法B有事务,则方法A创建一个新事务。
-
SUPPORTS级别:
- 如果方法A有事务,则方法B加入该事务;
- 如果方法A没有事务,则方法B以非事务方式执行。
-
MANDATORY级别:
- 如果方法A有事务,则方法B加入该事务;
- 如果方法A没有事务,则抛出异常。
-
REQUIRES_NEW级别:
- 不管方法A是否有事务,方法B都创建一个新的事务。
-
NOT_SUPPORTED级别:
- 不管方法A是否有事务,方法B都以非事务方式执行。
-
NEVER级别:
- 如果方法A有事务,则抛出异常;
- 如果方法A没有事务,则方法B以非事务方式执行。
-
NESTED级别:
- 如果方法A有事务,则在嵌套事务中执行方法B;
- 如果方法A没有事务,则方法B创建一个新的事务。
通过控制事务传播级别,我们可以更好地管理和控制事务的行为,使其符合业务需求和预期的结果。不同的事务传播级别可以满足不同的业务场景,提供了更灵活的事务管理能力。
1年前 -