spring有哪些事务传播属性
-
Spring中的事务传播属性用来定义一个事务方法被调用时,如何处理与其他事务的交互。以下是Spring的事务传播属性:
-
REQUIRED:如果当前存在事务,则加入该事务,如果不存在事务,则新建一个事务。这是默认的传播属性。
-
SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务的方式执行。
-
MANDATORY:如果当前存在事务,则加入该事务;如果不存在事务,则抛出异常。
-
REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务,并在该方法执行结束后,提交当前事务,并恢复原先的事务。
-
NOT_SUPPORTED:以非事务方式执行,并挂起当前事务(如果有)。
-
NEVER:以非事务方式执行,并拒绝当前事务(如果有)。
-
NESTED:如果当前存在事务,则在一个新的嵌套事务中执行。如果不存在事务,则创建一个新的事务。
需要注意的是,事务传播属性只对包含在同一线程中的方法调用起作用,不同线程中的方法调用无法影响事务传播属性。
以上是Spring中常用的事务传播属性,根据具体的业务需求,选择合适的传播属性可以保证事务的执行方式达到预期。
1年前 -
-
在Spring框架中,事务传播属性用于控制事务方法与其他事务方法的交互方式。Spring框架为我们提供了多种事务传播属性,确保事务的正确性和一致性。下面是Spring框架中常用的事务传播属性:
-
PROPAGATION_REQUIRED:表示当前方法必须运行在一个事务中。如果调用该方法的方法已经存在一个事务,则加入该事务;否则,创建一个新的事务。
-
PROPAGATION_SUPPORTS:表示当前方法不需要一个事务环境。如果调用该方法的方法存在一个事务,那么该方法将在该事务中运行;否则,它可以在没有事务的环境中运行。
-
PROPAGATION_MANDATORY:表示当前方法必须运行在一个事务中。如果调用该方法的方法不存在一个事务,将抛出一个异常。
-
PROPAGATION_REQUIRES_NEW:表示当前方法必须运行在它自己的事务中。一个新的事务将被启动,如果调用该方法的方法已经存在一个事务,则该事务被挂起。
-
PROPAGATION_NOT_SUPPORTED:表示当前方法不应该运行在一个事务中。如果存在一个事务,则该事务被挂起。
-
PROPAGATION_NEVER:表示当前方法不应该运行在一个事务中。如果调用该方法的方法存在一个事务,则抛出一个异常。
-
PROPAGATION_NESTED:表示当前方法必须在一个已经存在的事务中运行。如果没有事务存在,则开启一个新的事务。
这些事务传播属性可以通过在方法上使用@Transactional注解或者在XML配置文件中的tx:method元素进行设置。根据具体的业务需求和数据操作的要求,选择合适的事务传播属性可以确保事务的正确性,提高系统的性能和可靠性。
1年前 -
-
Spring框架提供了一套丰富的事务传播属性,以支持在多个事务边界下的事务管理。下面是一些常用的事务传播属性。
-
PROPAGATION_REQUIRED:如果当前存在一个事务,那么加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播属性。
-
PROPAGATION_SUPPORTS:如果当前存在一个事务,那么加入该事务;如果当前没有事务,则非事务方式执行。
-
PROPAGATION_MANDATORY:如果当前存在一个事务,那么加入该事务;如果当前没有事务,则抛出异常。
-
PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
-
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
-
PROPAGATION_NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
-
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务中执行。嵌套事务是在当前事务的范围内创建一个独立的事务,并且可以独立地回滚或提交。如果当前没有事务,则创建一个新的事务。
除了上述常用的事务传播属性,Spring还提供了一些其他属性,包括:
-
TIMEOUT:设置事务超时时间。如果事务执行的时间超过了设置的超时时间,事务管理器将自动回滚该事务。
-
READ_ONLY:指定事务是否为只读事务。对于只读事务,事务管理器可以优化事务处理过程,提高性能。
-
ISOLATION:指定事务的隔离级别。Spring提供了多种不同的隔离级别,包括读未提交、读已提交、可重复读和串行化。
事务传播属性可以通过@Transactional注解或在XML配置文件中进行配置。在使用@Transactional注解时,可以将事务传播属性作为注解的参数进行指定。例如:
@Transactional(propagation = Propagation.REQUIRED)
public void doSomething() {
// 事务操作
}在XML配置文件中配置事务传播属性的示例如下:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
tx:attributes
<tx:method name="*" propagation="REQUIRED" /><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
使用事务传播属性可以灵活地控制和管理事务,确保数据一致性和完整性。根据具体的业务需求和场景,选择合适的事务传播属性,可以提高系统的性能和可靠性。
1年前 -