事务传播行为
多个声明的事务的方法在相互调用的时候,这个是事务应该如何去传递。
比如说methodA()调用methodB(), 那么这两个方法都显示了开启了事务,那么methodB()是开启一个新的事务还是继续在methodA()这个事务里面去执行就取决于所谓的事务传播的一个行为。
在Spring中定义了七种事务传播行为。
REQUIRED
它是Spring里面默认的事务传播行为。也就是说如果当前存在事务,就加入到这个事务中去执行。如果不存在事务就新建一个事务。
REQUIRED_NEW
它不管是说是否存在事务,它都会新开启一个事务来执行。新老事务之间是相互独立的。外部事务抛出异常,并不会影响内部事务的一个正常提交。
NESTED
如果当前存在事务,就嵌套在当前事务中去执行。如果当前没有事务,那么就新建一个事务。类似REQUIRE_NEW这样一个传播行为。
SUPPORTS
表示支持当前的事务,如果当前不存在事务就以非事务的方式执行。
NOT SUPPORTED
它表示以非事务的方式来运行。如果当前存在事务,就需要把当前的事务挂起来。
MANDATORY
它是一个强制的事务执行,就是如果当前不存在事务,就抛出一个异常。
NEVER
以非事务的方式来执行。如果当前存在事务则抛出异常。
Spring里面的事务传播级别,一般是不需要去定义的。默认就是一个REQUIRED。除非是在嵌套的事务的情况下,需要重点去了解。
参考资料:事务传播行为