事務-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()。在相同線程中進行相互嵌套調用的事務方法工做於相同的事務中。若是這些相互嵌套調用的方法工做在不一樣的線程中,不一樣線程下的事務方法工做在獨立的事務中。  

相關文章
相關標籤/搜索