spring事务传播什么时候触发
-
Spring事务传播是在方法调用的过程中触发的。当一个方法调用了另一个方法,且这两个方法都被定义为事务方法时,事务传播就被触发了。
具体来说,当一个方法A被调用时,如果这个方法设置了事务传播特性,那么Spring会根据设置的传播特性来决定如何处理事务。事务传播特性可以通过注解或配置文件来设置。
以下是几种常见的事务传播特性:
-
REQUIRED:如果方法A被调用时,如果当前没有事务存在,那么Spring会创建一个新的事务并将方法A纳入到这个事务中。如果方法A被调用时,已经存在一个事务,那么方法A将在该事务中运行。
-
REQUIRES_NEW:无论是否存在当前事务,方法A都会被创建一个新的事务来运行。如果方法A被调用时,已经存在一个事务,那么该事务将被挂起,方法A使用新的事务。
-
SUPPORTS:如果方法A被调用时,当前存在一个事务,那么方法A将在该事务中运行。如果当前没有事务存在,那么方法A将以非事务方式运行。
-
NOT_SUPPORTED:方法A将以非事务方式运行,如果当前存在一个事务,那么该事务将被挂起。
-
NEVER:如果当前存在事务,那么方法A将抛出异常。方法A将以非事务方式运行。
-
MANDATORY:如果方法A被调用时,当前没有事务存在,那么将抛出异常。
-
NESTED:如果方法A被调用时,已经存在一个事务,那么方法A将在该事务的嵌套事务中运行。如果当前没有事务存在,那么将创建一个新的事务。
以上是Spring事务传播特性的一些常见例子。根据实际需求,选择合适的传播特性可以更好地管理事务。
1年前 -
-
Spring事务传播是在调用方法时触发的。具体来说,当一个带有事务注解的方法被调用时,Spring会根据事务传播属性来决定如何处理事务。
以下是几种常用的事务传播属性:
-
REQUIRED:默认的传播属性,表示如果当前已经存在一个事务,则加入该事务,如果没有事务,则创建一个新的事务。这是最常用的传播属性。
-
REQUIRES_NEW:表示当前方法的事务会挂起已存在的事务,并创建一个新的事务。如果已存在的事务需要继续执行,可以通过使用
Propagation.PROPAGATION_REQUIRES_NEW属性来实现。 -
SUPPORTS:表示当前方法可以在一个事务内执行,如果当前没有事务,则以非事务的方式执行。
-
NOT_SUPPORTED:表示当前方法不应该在一个事务内执行。如果当前存在事务,则将其挂起。
-
MANDATORY:表示当前方法必须在一个事务内执行。如果当前没有事务,则会抛出异常。
事务传播属性允许开发者根据不同的场景选择不同的事务控制策略。通过合理选择事务传播属性,可以确保事务在整个方法调用链中正确地进行管理。
1年前 -
-
Spring事务传播是在调用方法时触发的。
Spring事务传播机制是用于控制多个事务方法之间的事务行为的。在实际应用中,常常会存在多个事务方法相互调用的情况,这时就需要通过事务传播来确定事务的具体行为。
Spring框架提供了七种事务传播行为,分别是:
- REQUIRED:如果当前存在事务,则加入该事务;如果当前不存在事务,则创建一个新的事务。
- SUPPORTS:如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式执行。
- MANDATORY:如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。
- REQUIRES_NEW:每次都创建一个新的事务,如果当前存在事务,则将当前事务挂起。
- NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则将当前事务挂起。
- NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前不存在事务,则按REQUIRED方式执行。
事务传播的触发时机是在调用一个具有事务注解的方法时。当调用一个具有事务注解的方法时,Spring会根据注解的事务传播属性决定是创建新事务还是加入已有事务。如果方法中存在多个事务注解,那么Spring会优先使用方法级别上的事务传播属性。
在事务方法中调用其他事务方法时,会根据事务传播属性来确定具体的事务行为。如果调用的方法上没有定义事务注解,则会继承上层方法的事务属性。如果调用的方法上有定义事务注解,则会根据事务传播属性决定是否要创建新事务或者加入已有事务。
总而言之,Spring事务传播机制是根据方法调用的时机和事务传播属性来确定事务行为的。是在调用具有事务注解的方法时触发的。
1年前