spring的事务是怎么传递的
-
Spring的事务传递是通过方法的调用来实现的。在Spring中,可以根据需要在方法和类级别上声明事务。当一个方法被声明为事务时,Spring会提供事务管理的机制来保证数据的一致性和完整性。
在方法调用过程中,事务的传递有以下几种情况:
-
REQUIRED:默认的传递行为。如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。这是最常用的传递行为。
-
REQUIRES_NEW:每次都会创建一个新的事务,如果当前存在事务,则将当前事务挂起,并创建一个新的事务。新的事务完全独立于当前事务,是两个独立的事务。
-
SUPPORTS:如果当前存在事务,则加入该事务执行。如果没有事务,则以非事务的方式执行。支持事务,但不会强制使用事务。
-
NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将当前事务挂起。即使调用方存在事务,也会将其暂时挂起。
-
MANDATORY:要求当前存在事务,如果不存在事务,则抛出异常。调用方必须存在事务,否则会抛出异常。
-
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。调用方不能存在事务,否则会抛出异常。
需要注意的是,事务传递的行为由调用方决定。在Spring中,可以通过配置@Transactional注解或者XML配置来指定事务的传递行为。在方法上添加@Transactional注解可以实现事务的声明和传递行为。
总结:Spring的事务传递是通过方法的调用来实现的,可以根据需要在方法和类级别上声明事务,并通过@Transactional注解或者XML配置来指定事务的传递行为。常用的传递行为有REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED、MANDATORY和NEVER。
1年前 -
-
Spring事务的传递性是指在多个方法调用的情况下,事务是如何继承和传递的。Spring框架提供了灵活的配置选项,使得事务的传递可以根据应用程序的需求来定制。下面是关于Spring事务传递的五个重点内容:
-
默认情况下,Spring事务是通过AOP代理来实现的。当一个被@Transactional注解标记的方法被调用时,Spring会检查当前线程上下文中是否存在事务,如果存在则会加入到该事务中,否则会创建一个新的事务。在方法调用链中,每个被@Transactional注解标记的方法将会在同一个事务中执行。这就是Spring事务的传递性。
-
Spring事务传播行为(Propagation)是一种用于控制事务传递的机制。Spring定义了多种传播行为,包括REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED、MANDATORY和NEVER等。每种传播行为都有不同的行为方式,用于处理嵌套事务、事务的创建和加入等情况。
-
REQUIRED是默认的传播行为,表示如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,适用于跨方法调用的事务管理。
-
REQUIRES_NEW是另一种常用的传播行为,表示无论当前是否存在事务,都会创建一个新的事务。这种传播行为适用于需要将一个方法的事务与其他方法的事务分离的情况。
-
SUPPORTS表示如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式执行。这种传播行为适用于在存在事务的情况下执行一些只读操作。
总结来说,Spring事务的传递性是通过AOP代理来实现的,默认情况下使用REQUIRED传播行为。开发人员可以根据实际需求,使用不同的传播行为来控制事务的传递和创建行为。
1年前 -
-
Spring的事务传递是通过事务传播行为来实现的。事务传播行为决定了一个事务方法被另一个事务方法调用时,如何传递事务。Spring提供了多种事务传播行为,开发者根据需求选择适合的传播行为。
下面将详细介绍一些常用的事务传播行为及其使用方法:
-
REQUIRED(默认行为):
REQUIRED是最常用的事务传播行为。当一个业务方法被调用时,如果当前存在事务,方法将在该事务中执行;如果当前没有事务,将创建一个新的事务。如果嵌套调用了多个REQUIRED传播行为的方法,它们将在同一个事务中运行。 -
REQUIRES_NEW:
REQUIRES_NEW表示每次方法调用都会创建一个新的事务。如果当前存在事务,则将当前事务挂起,并创建一个新的事务;如果当前没有事务,则直接创建一个新的事务。在REQUIRES_NEW传播行为中,每个方法调用都是独立的事务,相互之间没有影响。 -
SUPPORTS:
SUPPORTS表示当前方法支持事务,如果当前存在事务,则在当前事务中执行;如果当前没有事务,则以非事务方式执行。SUPPORTS传播行为可以在有事务的环境下执行,也可以在没有事务的环境下执行。 -
NOT_SUPPORTED:
NOT_SUPPORTED表示当前方法不支持事务,无论当前是否存在事务,都以非事务方式执行。如果当前存在事务,则将该事务挂起,在方法执行结束后恢复现场。 -
MANDATORY:
MANDATORY表示当前方法必须在一个已存在的事务中执行,如果当前没有事务,则抛出异常。MANDATORY传播行为要求调用方必须存在一个事务,并且将该事务传播给被调用方。 -
NEVER:
NEVER表示当前方法不能在一个事务中执行,如果当前存在事务,则抛出异常。NEVER传播行为要求调用方不能存在事务,否则会抛出异常。 -
NESTED:
NESTED表示当前方法在一个已存在的事务中执行,如果当前没有事务,则新建一个事务。NESTED传播行为创建一个嵌套的事务,并在该事务中执行方法。嵌套事务是外部事务的子事务,它们是相互独立的,有自己独立的事务提交和回滚。如果外部事务回滚,则内部事务也会回滚,但内部事务回滚不会影响外部事务。
除了以上列举的几种事务传播行为,Spring还提供了其他一些传播行为,比如REQUIREMENTS_NEW、NESTED等。开发者根据具体的业务需求选择合适的事务传播行为,可以在方法上使用@Transactional注解来指定事务传播行为,也可以在XML配置文件中进行配置。
1年前 -