Spring传播属性有哪些
-
Spring传播属性是指在进行方法调用时,决定事务是否可以被传播到其他方法或者其他事务中的一组属性。Spring中提供了以下几种传播属性:
-
PROPAGATION_REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则新建一个事务。这是最常用的传播属性,保证在一个事务中执行。
-
PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则按非事务方式执行。
-
PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
-
PROPAGATION_REQUIRES_NEW:新建一个事务,并挂起当前事务,如果存在事务则将其挂起。该传播属性会在执行方法的过程中创建一个新的独立事务,不受外部事务的影响。
-
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将其挂起。
-
PROPAGATION_NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
-
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则新建一个事务。嵌套事务是一个独立的事务,它依赖于外部事务的提交或回滚。
上述传播属性可以根据不同的业务需求进行选择,合理的使用传播属性可以确保数据的一致性和事务的隔离性。在编写代码时,需要仔细考虑每个方法的传播属性,以及它们之间的逻辑关系,以避免出现不一致的情况。
1年前 -
-
Spring框架中的传播属性是用来定义事务在不同方法之间如何传播的。事务的传播属性可以控制多个事务方法之间的事务行为。以下是Spring框架中常用的传播属性:
-
REQUIRED:如果当前有事务在运行,则该方法将在该事务内运行,否则就创建一个新的事务。REQUIRED是Spring默认的事务传播属性。
-
SUPPORTS:如果当前有事务在运行,则该方法将在该事务内运行,否则就以非事务的形式运行。SUPPORTS适用于不需要事务的方法。
-
MANDATORY:该方法必须在一个已存在的事务中运行,否则就会抛出异常。MANDATORY用于要求方法在事务中运行的场景。
-
REQUIRES_NEW:该方法必须在一个新的事务中运行,如果当前有事务在运行,则将当前事务挂起。REQUIRES_NEW用于要求方法在新的事务中运行的场景。
-
NOT_SUPPORTED:该方法不能在一个事务中运行,如果当前有事务在运行,则将当前事务挂起。NOT_SUPPORTED用于不希望方法参与事务的场景。
-
NEVER:该方法不能在一个事务中运行,如果当前有事务在运行,则抛出异常。NEVER用于禁止方法参与事务的场景。
-
NESTED:如果当前有事务在运行,则该方法将在该事务的嵌套事务中运行,如果当前没有事务在运行,则该方法将创建一个新的事务。NESTED用于支持嵌套事务的场景。
通过使用不同的传播属性,可以灵活地控制事务的行为,以适应不同的业务需求。
1年前 -
-
在Spring中,事务的传播属性用于控制多个事务方法之间的事务行为,包括数据库事务的开始、提交、回滚等。Spring事务的传播属性有以下几种:
-
Propagation.REQUIRED(默认):如果当前存在事务,则加入到当前事务中执行,如果当前没有事务,则创建一个新事务并执行。这是最常用的属性,可以确保方法始终运行在一个事务中。
-
Propagation.SUPPORTS:如果当前存在事务,则加入到当前事务中执行,如果当前没有事务,则以非事务的方式执行。适用于不需要强制事务的场景。
-
Propagation.MANDATORY:强制要求当前方法在事务中执行,如果当前没有事务,则抛出异常。适用于要求方法必须在事务中执行的场景。
-
Propagation.REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务并执行。即使当前存在事务,也会挂起当前事务。
-
Propagation.NOT_SUPPORTED:以非事务的方式执行方法,如果当前存在事务,则挂起当前事务并在方法执行完毕后恢复事务。
-
Propagation.NEVER:以非事务的方式执行方法,如果当前存在事务,则抛出异常。
-
Propagation.NESTED:如果当前存在事务,则在嵌套事务中执行,如果当前没有事务,则创建一个新事务并执行。嵌套事务是嵌套在外层事务中的独立事务,嵌套事务的成功或回滚不会对外层事务产生影响。
以上是Spring事务的传播属性,在使用Spring进行事务管理时,根据不同的需求选择合适的传播属性可以更好地控制事务的行为。
1年前 -