当前位置: 首页 > 科技观察

Spring中的事务传播行为有哪些?

时间:2023-03-11 23:37:32 科技观察

今天和大家分享一下我对Spring传播行为的理解。1、事务传播行为在日常开发中,我们经常会有多个声明事务的方法相互调用。在这种情况下,将会有两个或多个嵌套事务。所谓交易传播行为是指这些交易之间的传播规则。看这段代码:@Transaction(Propagation=REQUIRED_NEW)publicvoidmethodA(){}@Transaction(Propagation=REQUIRED)publicvoidmethodB(){methodA();}在这段代码中,methodB()调用了methodA(),这两种方法都显示交易已打开。methodA()是开始新的事务,还是在methodB()事务中继续执行?这取决于事务的传播行为规则的定义。2、事务嵌套事务嵌套是指两个或多个打开的事务的方法嵌套调用。在这种情况下,就需要为这些交易之间的传播行为制定规则。在Spring中,一共定义了7种内置的事务嵌套传播行为:第一种:REQUIRED,这是Spring默认的事务传播行为。表示如果当前存在一个事务,就加入这个事务,如果没有事务,就创建一个新的事务。类型2:REQUIRE_NEW:表示无论是否有事务,都会创建一个新的事务,并且新创建的事务独立于之前定义的事务。外部事务抛出的异常回滚不会影响内部事务的正常提交。类型3:NESTED:如果一个事务当前存在,则嵌套在当前事务中执行。如果当前没有事务,则新建一个事务,类似于REQUIRE_NEW。类型4:SUPPORTS:表示支持当前事务,如果当前没有事务,则以非事务方式执行。类型5:NOT_SUPPORTED:表示以非事务方式运行,如果有当前事务,则暂停当前事务。类型6:MANDATORY:强制事务执行,如果当前没有事务,会抛出异常。类型7:NEVER:以非事务方式执行,如果当前存在事务,将抛出异常。Spring事务传播一般不需要开发者显式定义。默认是PROPAGATION_REQUIRED,只要在嵌套事务的情况下需要理解即可。