spring中事物的传播特性有哪些
-
在Spring框架中,事务的传播特性用于决定在一个事务方法被嵌套调用时,当前事务如何传播给嵌套方法。以下是Spring框架中常用的事务传播特性:
- REQUIRED:如果当前存在事务,则加入该事务并执行;如果当前没有事务,则新建一个事务并执行。
- SUPPORTS:如果当前存在事务,则加入该事务并执行;如果当前没有事务,则以非事务方式执行。
- MANDATORY:如果当前存在事务,则加入该事务并执行;如果当前没有事务,则抛出异常。
- REQUIRES_NEW:如果当前存在事务,则挂起该事务并新建一个事务来执行;如果当前没有事务,则新建一个事务并执行。
- NOT_SUPPORTED:以非事务方式执行;如果当前存在事务,则将其挂起。
- NEVER:以非事务方式执行;如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则将当前事务嵌套在嵌套事务中执行;如果当前没有事务,则新建一个事务并执行。
每个传播特性都有其适用场景,可以根据具体需求选择合适的传播特性来配置事务。通过灵活的配置事务传播特性,可以保证系统的数据一致性和可靠性。
1年前 -
Spring框架中的事务传播特性(Transaction Propagation)是用来控制事务在不同方法之间如何传播和嵌套的。Spring提供了以下几种事务传播特性:
-
REQUIRED(默认):如果当前存在事务,则有joining的资格,如果当前没有事务,则创建一个新事务。该传播特性保证方法总是在一个事务中执行,如果当前存在事务,则沿用当前事务,如果当前没有事务,则会创建一个新的事务。
-
SUPPORTS:如果当前存在事务,则有joining的资格,如果当前没有事务,则以非事务方式执行。该传播特性使用当前的事务,如果不存在事务则以非事务方式执行方法。
-
MANDATORY:如果当前存在事务,则有joining的资格,如果当前没有事务,则抛出异常。该传播特性强制该方法在一个已存在的事务中执行,如果不存在事务则会抛出异常。
-
REQUIRES_NEW:无论当前是否存在事务,都会创建一个新的事务。该传播特性总是会新建一个事务,如果已存在事务则挂起并创建新事务,直到新事务完成后再恢复原有事务。
-
NOT_SUPPORTED:该传播特性以非事务方式执行方法,如果存在事务则将其挂起。该传播特性会以非事务方式执行,如果存在事务则将其挂起。
另外,还有两个特殊的传播特性:
-
NEVER:如果当前存在事务,则抛出异常。该传播特性确保该方法不会在事务中执行,如果存在事务则会抛出异常。
-
NESTED:如果当前存在事务,则在嵌套事务中执行,如果当前没有事务,则会创建一个新的事务。该传播特性使用一个嵌套事务,嵌套事务是当前事务的一部分,它可以回滚而不会影响到外部事务的提交。
事务传播特性可以通过在Spring的@Transactional注解中设置propagation属性来进行配置。根据不同的业务需求,选择合适的事务传播特性可以保证事务的一致性和隔离性。
1年前 -
-
Spring中的事务传播特性是指在多个事务方法之间,事务是如何传播的。Spring提供了多种事务传播特性,可以根据具体的业务需求来选择合适的传播特性。
-
REQUIRED:默认的传播特性,如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。如果外部方法没有开启事务,则REQUIRED等同于不开启事务。
-
SUPPORTS:如果当前存在事务,则加入该事务,如果不存在事务,则以非事务的方式运行。
-
MANDATORY:必须要有一个当前的事务,否则抛出异常。
-
REQUIRES_NEW:无论是否存在当前事务,都创建一个新的事务。如果外部方法存在事务,则将其挂起。
-
NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则将其挂起。
-
NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在一个新的Savepoint处创建一个嵌套事务,嵌套事务是外部事务的一部分。外部事务回滚时,嵌套事务同样回滚。如果外部事务没有开启事务,则NESTED等同于REQUIRED。
在使用事务传播特性时,可以使用注解或XML配置的方式。使用注解时,可以在方法上使用
@Transactional注解,并指定propagation参数来设置传播特性。例如@Transactional(propagation = Propagation.REQUIRES_NEW)。使用XML配置时,可以在<tx:advice>元素中使用<tx:method>子元素,设置propagation属性。事务传播特性对于处理事务之间的关系非常重要,可以确保数据的一致性和完整性。根据具体的业务需求,选择合适的传播特性可以实现精细的事务控制。
1年前 -