spring事物传播特性有哪些
-
Spring事务传播特性(Transaction Propagation)是指在多个事务之间进行传播的规则,它描述了当一个事务方法调用了另一个事务方法时,如何处理两个事务之间的关系。Spring框架提供了七种事务传播特性,分别是:
-
REQUIRED(默认):如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是最常用的传播特性,它确保当前方法在一个事务中运行。
-
SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。这种传播特性通常用于只读操作,即不需要事务的方法。
-
MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。这种传播特性通常用于必须在事务中执行的方法。
-
REQUIRES_NEW:总是创建一个新的事务,如果当前存在事务,则将其挂起。这种传播特性通常用于某些方法需要独立的事务执行,与外层事务无关。
-
NOT_SUPPORTED:以非事务的方式执行方法。如果当前存在事务,则将其挂起。这种传播特性通常用于不需要事务的方法。
-
NEVER:以非事务的方式执行方法。如果当前存在事务,则抛出异常。这种传播特性通常用于不允许在事务中执行的方法。
-
NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是独立于外层事务的,它们可以单独进行回滚或提交。这种传播特性通常用于允许内部事务独立于外部事务执行的情况。
总结:事务传播特性决定了当一个事务方法调用另一个事务方法时,两个事务之间的关系。不同的传播特性适用于不同的业务需求。根据业务的需要选择适当的传播特性可以确保数据的一致性和完整性。
1年前 -
-
Spring事务传播特性(Transaction Propagation)是用来定义事务的边界和事务在不同方法之间的传播行为的。Spring框架提供了7种事务传播特性,分别是:
-
REQUIRED:如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是默认的传播特性。
-
SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式执行。
-
MANDATORY:如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:创建一个新的事务,并挂起当前事务,如果当前存在事务。
-
NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则挂起该事务。
-
NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则创建一个新的事务。嵌套事务是外部事务的一部分,它们可以分别提交或回滚,但如果外部事务提交,则嵌套事务也会被提交;如果外部事务回滚,则嵌套事务也会被回滚。
在使用Spring事务时,可以根据实际业务需求选择合适的事务传播特性来控制事务的行为。比如,如果一个方法调用另一个方法时需要使用同一个事务,可以使用REQUIRED传播特性;如果一个方法需要使用独立的事务,不受外部事务的影响,可以使用REQUIRES_NEW传播特性。
1年前 -
-
Spring事务传播特性是指在多个事务操作之间如何处理事务的一组规则。在Spring框架中,定义了七种事务传播特性,分别是:
-
REQUIRED(默认):如果当前存在事务,则加入该事务中;如果不存在事务,则创建一个新的事务。这是最常用的传播特性。
-
SUPPORTS:如果当前存在事务,则加入该事务中;如果不存在事务,则以非事务的方式执行。
-
MANDATORY:如果当前存在事务,则加入该事务中;如果不存在事务,则抛出异常。
-
REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将当前事务挂起,新事务执行完毕后恢复当前事务。
-
NOT_SUPPORTED:以非事务的方式执行。如果当前存在事务,则将当前事务挂起。
-
NEVER:以非事务的方式执行。如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在当前事务内嵌套执行一个新的事务;如果不存在事务,则创建一个新的事务。如果外部事务提交,则嵌套事务一起提交;如果外部事务回滚,则嵌套事务回滚。嵌套事务是数据库的内部事务,有自己的保存点,可以独立回滚。
在配置Spring事务时,可以通过设置@Transactional注解或xml配置文件中的tx:advice元素的propagation属性来指定事务传播特性。例如:
@Transactional(propagation = Propagation.REQUIRED) public void doSomething() { // 事务操作 }<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="doSomething" propagation="REQUIRED" /> </tx:attributes> </tx:advice>1年前 -