spring事物传播行为是什么
-
Spring事务传播行为是指在一个事务中,涉及多个事务处理的方法之间的相互关系。在Spring中,通过设置事务的传播行为,可以控制多个事务处理方法之间的事务提交和回滚的方式。
Spring定义了七种事务传播行为:
-
REQUIRED(默认):如果当前方法已经存在一个事务,那么方法将在该事务中运行。否则,将创建一个新的事务,并在其中运行方法。
-
SUPPORTS:如果当前方法已经存在一个事务,那么方法将在该事务中运行。否则,它可以不运行在事务中。
-
MANDATORY:如果当前方法已经存在一个事务,那么方法将在该事务中运行。否则,它将抛出异常。
-
REQUIRES_NEW:无论当前方法是否存在事务,方法都将在一个新的事务中运行。如果存在事务,当前事务将被挂起。
-
NOT_SUPPORTED:方法将在非事务环境中运行。如果存在事务,当前事务将被挂起。
-
NEVER:方法将在非事务环境中运行。如果存在事务,则抛出异常。
-
NESTED:如果当前方法已经存在一个事务,并且嵌套事务可以被支持,则该方法将在嵌套事务中运行。如果当前方法不存在事务,则它的行为和REQUIRED一样。
这些事务传播行为可根据具体业务需求进行选择。通过合理使用事务传播行为,可以实现事务的粒度控制和不同层级之间的事务处理。
1年前 -
-
Spring事务传播行为是指在多个事务方法相互调用的过程中,如何处理事务的一种策略。在Spring中,事务传播行为用来定义一个事务方法被另一个事务方法调用时,它们之间事务的传播方式和边界控制。
以下是几种常见的Spring事务传播行为:
-
REQUIRED(默认):如果当前没有事务,就新建一个事务;如果已经存在一个事务中,就加入到这个事务中。这是最常用的传播行为,适用于大部分的业务场景。
-
SUPPORTS:如果当前存在事务,就加入到这个事务中;如果当前没有事务,就以非事务的方式执行。这种传播行为适合于一些非关键的操作,如查询等。
-
MANDATORY:如果当前存在事务,就加入到这个事务中;如果当前没有事务,则抛出异常。这种传播行为适合于一些必须在事务中执行的操作,如更新或删除等。
-
REQUIRES_NEW:如果当前存在事务,就将当前事务挂起,新建一个事务执行;如果当前没有事务,就新建一个事务执行。这种传播行为适合于一些需要独立事务执行的操作,如日志记录等。
-
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就将当前事务挂起。这种传播行为适合于一些独立于事务执行的操作,如发送邮件等。
需要注意的是,事务传播行为只在方法被另一个事务方法调用时起作用,如果方法直接被外部调用,则事务传播行为不生效。此外,事务传播行为可以在类级别上使用,以决定整个类中的方法的事务行为。
1年前 -
-
Spring事务传播行为是指在一个事务方法被调用时,这个事务方法如何处理一个已经存在的事务。事务传播行为可以用来控制事务方法之间的事务边界,决定了事务方法如何与已经存在的事务进行交互。
Spring框架提供了七种事务传播行为,分别为:
-
REQUIRED(默认):如果当前已经存在一个事务,那么就加入到已经存在的事务中,如果不存在事务,就创建一个新的事务。这是最常见的选择,也是最常用的传播行为。
-
SUPPORTS:如果当前已经存在一个事务,就加入到已经存在的事务中,如果不存在事务,就以非事务的方式执行。
-
MANDATORY:必须要有一个已经存在的事务,否则就会抛出异常。这种传播行为通常用在一系列相关的事务方法中,保证它们都在一个事务中执行。
-
REQUIRES_NEW:不管当前是否存在事务,都会创建一个新的事务。如果存在事务,就将当前事务挂起,执行完新的事务后再恢复原来的事务。
-
NOT_SUPPORTED:不支持事务。如果当前已经存在事务,就挂起事务,在方法执行结束后再恢复原来的事务。
-
NEVER:不支持事务。如果当前存在事务,就抛出异常。
-
NESTED:如果当前存在事务,就在当前事务的嵌套事务中执行,如果当前不存在事务,就执行一个新的事务。如果外部事务提交,那么嵌套事务也会一同提交;如果外部事务回滚,那么嵌套事务也会一同回滚;如果嵌套事务独立提交或回滚,不会影响外部事务的状态。
在Spring事务管理中,默认的事务传播行为是REQUIRED。可以通过@Transactional注解或配置文件来指定事务传播行为。使用@Transactional注解时,可以在方法上直接使用注解,也可以在类级别上使用注解统一指定该类中所有方法的事务传播行为。配置文件方式需要在xml文件中配置事务管理器和切入点表达式,并指定事务传播行为。
事务传播行为的选择依赖于具体的业务需求,需要根据不同的情况来合理选择。
1年前 -