事务-09-spring事务传播

https://blog.csdn.net/bigtree_3721/article/details/53966617.net

所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7种事务传播行为线程

一、PROPAGATION_REQUIRED(加入已有事务)blog

若是当前没有事务,就新建一个事务,若是已经存在一个事务中,加入到这个事务中。这是最多见也是默认的方式。事务

二、PROPAGATION_SUPPORTS(跟随环境)程序

支持当前事务,若是当前没有事务,就以非事务方式执行。方法

三、PROPAGATION_MANDATORY(须要事务)d3

使用当前的事务,若是当前没有事务,就抛出异常。异常

四、PROPAGATION_REQUIRES_NEW(独立事务)vi

新建事务,若是当前存在事务,把当前事务挂起。工作

五、PROPAGATION_NOT_SUPPORTED(非事务方式)

以非事务方式执行操做,若是当前存在事务,就把当前事务挂起。

六、PROPAGATION_NEVER(排除事务)

以非事务方式执行,若是当前存在事务,则抛出异常。

七、PROPAGATION_NESTED(嵌套事务)

若是当前存在事务,则在嵌套事务内执行。若是当前没有事务,则执行与PROPAGATION_REQUIRED相似的操做。


Spring默认的事务传播行为是PROPAGATION_REQUIRED,它适合于绝大多数的状况。假设ServiveX#methodX()都工做在事务环境下(即都被Spring事务加强了),假设程序中存在以下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这3个服务类的3个方法经过Spring的事务传播机制都工做在同一个事务中。

若是在一个ServiceA和a()方法中启动一个线程,在这个新建立的线程中执行ServiceB的事务方法b()。在相同线程中进行相互嵌套调用的事务方法工做于相同的事务中。若是这些相互嵌套调用的方法工做在不一样的线程中,不一样线程下的事务方法工做在独立的事务中。  

相关文章
相关标签/搜索