spring事物传播行为有哪些
-
Spring事务传播行为是用来定义在一个事务执行过程中,不同的方法之间是否需要共享一个事务的行为。Spring框架提供了一些事务传播行为类型,下面列举了常用的几种:
-
REQUIRED:如果当前存在一个事务,则加入到这个事务中。如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,用于保证方法调用在一个事务中执行。
-
SUPPORTS:如果当前存在一个事务,则加入到这个事务中。如果当前没有事务,则以非事务的方式执行。适用于事务需要可选的场景。
-
MANDATORY:如果当前存在一个事务,则加入到这个事务中。如果当前没有事务,则抛出异常。适用于必须在事务中执行的场景。
-
REQUIRES_NEW:创建一个新的事务,并挂起当前事务。如果当前存在一个事务,则将其挂起,并创建一个新的事务。适用于希望方法独立于当前事务执行的场景。
-
NOT_SUPPORTED:以非事务方式执行,并且如果当前存在一个事务,则将其挂起。适用于不需要事务支持的场景。
-
NEVER:以非事务方式执行,并且如果当前存在一个事务,则抛出异常。适用于希望方法不在事务中执行的场景。
-
NESTED:如果当前存在一个事务,则在这个事务的嵌套事务中执行。如果当前没有事务,则创建一个新的事务。适用于需要嵌套事务的场景。
以上是常用的事务传播行为类型,根据应用的需求选择适合的行为类型可以保证数据的完整性和一致性。在使用Spring事务管理时,合理配置事务传播行为是非常重要的。
1年前 -
-
Spring事务传播行为指的是在一个事务方法调用另一个事务方法时,事务应该如何进行传播和处理的规则。Spring框架定义了多种事务传播行为,以下列举了其中的五种:
-
REQUIRED(默认):如果当前存在事务,则加入到当前事务中,并与当前事务一起进行提交或回滚。如果当前没有事务,则创建一个新的事务。
-
SUPPORTS:如果当前存在事务,则加入到当前事务中,并与当前事务一起进行提交或回滚。如果当前没有事务,则不创建新事务,直接执行。
-
MANDATORY:要求当前存在事务,如果当前不存在事务,则抛出异常。使用该传播行为可以要求调用方法必须在事务内部执行。
-
REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务进行执行,并将当前事务挂起。新事务执行完毕后,再恢复执行当前事务。
-
NOT_SUPPORTED:不支持事务,如果当前存在事务,则挂起当前事务,并在没有事务的情况下执行调用方法。
需要注意的是,事务传播行为必须在@Transactional注解或配置文件中进行配置。可以根据具体的业务需求选择合适的事务传播行为,以保证事务的一致性和完整性。在实际开发中,根据具体情况选择合适的事务传播行为非常重要。
1年前 -
-
Spring事务传播行为用于指定一个方法被事务管理器管理时,其对于已经存在的事务的处理方式。Spring提供了七种事务传播行为,分别是:
-
REQUIRED(默认):如果当前存在事务,则加入该事务中执行,如果当前不存在事务,则创建一个新的事务。
-
SUPPORTS:如果当前存在事务,则加入该事务中执行,如果当前不存在事务,则以非事务方式执行。
-
MANDATORY:如果当前存在事务,则加入该事务中执行,如果当前不存在事务,则抛出异常。
-
REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起该事务。
-
NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起该事务。
-
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在该事务的嵌套事务中执行,如果当前不存在事务,则创建一个新的事务。嵌套事务可以独立提交或回滚,如果嵌套事务独立提交,则对外部事务没有影响,如果嵌套事务回滚,则回滚到保存点,同时也会对外部事务进行回滚。
对于以上的事务传播行为,可以通过注解或XML配置的方式进行配置。下面将分别介绍两种配置方式。
使用注解配置事务传播行为
- 在配置文件中开启事务注解支持:
<tx:annotation-driven transaction-manager="transactionManager"/>- 在需要进行事务管理的类或方法上添加
@Transactional注解,并设置对应的事务传播行为:
@Transactional(propagation = Propagation.REQUIRED) public void method1(){} @Transactional(propagation = Propagation.REQUIRES_NEW) public void method2(){}使用XML配置事务传播行为
- 配置事务管理器:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>- 配置事务属性:
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="method1" propagation="REQUIRED"/> <tx:method name="method2" propagation="REQUIRES_NEW"/> </tx:attributes> </tx:advice>- 配置切入点和通知:
<aop:config> <aop:pointcut id="servicePointcut" expression="execution(* com.example.Service.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/> </aop:config>以上是Spring事务传播行为的介绍和配置方式。根据业务需求,选择合适的事务传播行为,可以保证数据的一致性和完整性。
1年前 -