事務的傳播行爲

事務的傳播行爲

當事務A被事務B調用時,必須得指定事務的傳播行爲。java

事務的傳播行爲有7種,分別爲REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTEDsql

 

  1. REUQIRED

若是A方法和B方法的關係時這樣子的spa

 

若是A調用B,那麼B和A走的同一個事務;3d

若是A沒有加事務,那麼B就會從新new一個事務;orm

 

2.SUPPORTSblog

若是A有事務,那麼B會和A共用一個事務;事務

若是A沒有事務,那麼B也不會有事務。it

3.MANDATORYio

若是A有事務,那麼B會和A用一個事務;form

若是A沒有事務,那麼B會跑出異常,也就是B若是這樣配了必須得加入有事務的方法。

4.REQUIRES_NEW

這樣寫的話,執行B時將會把A事務掛起,B事務提交後才能提交A事務,能夠這麼說,這兩個事務是相互獨立的。

 

5.NOT_SUPPORTED

若是事務B被賦予NOT_SUPPORTED,那麼事務B不管如何都不支持事務,而且掛起全部事務。

 

6.NEVER

老是非事務地執行,若是寫成上圖這樣,它會拋異常,由於它存在事務。

 

7.NESTED

若是一個活動的事務存在,則運行在一個嵌套的事務中. 若是沒有活動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執行。這是一個嵌套事務,使用JDBC 3.0驅動時,僅僅支持DataSourceTransactionManager做爲事務管理器。須要JDBC 驅動的java.sql.Savepoint類。有一些JTA的事務管理器實現可能也提供了一樣的功能。使用PROPAGATION_NESTED,還須要把PlatformTransactionManager的nestedTransactionAllowed屬性設爲true;而 nestedTransactionAllowed屬性值默認爲false。

外層事務的回滾能夠引發內層事務的回滾。而內層事務的異常並不會致使外層事務的回滾,它是一個真正的嵌套事務

相關文章
相關標籤/搜索