Spring事務的傳播行爲案例分析

網上關於Spring事務傳播性以及隔離型的文章漫天蓋地,還有不負責任的直接複製名詞意思,文章雖然不少倒是看的雲裏霧裏,咱們今天將給出案例分別和你們一塊兒學習。面試

一、spring給出常常面試的考點Spring事務的4個特性含義---這個很容易理解spring

二、spring事務傳播特性的定義以及案例分析 ide

1、事務的特性ACID

這四個英文單詞拼寫我一直記不住,求記憶方法學習

  • 原子性(Atomicity):事務是一系列原子操做,要麼所有成功,要麼所有失敗。測試

  • 一致性(Consistency):一旦完成(不論是成功仍是失敗),確保它所在的一系列業務狀態保持一致,狀態都是成功,或者都是失敗,不能一部分紅功一部分失敗。ui

  • 隔離性(Isolation):不一樣事務同時進行某項業務,處理相同的數據時候,須要保證事務之間相互獨立,互相之間數據不影響。3d

  • 持久性(Durability):一旦事務完成,不管發生什麼系統性錯誤,事務執行後的數據都被持久化了,不會由於重啓或其餘操做對數據進行更改。

2、spring事務傳播特性的定義以及案例分析 

咱們先給出定義再分別進行簡單的代碼分析code

給出百度圖片,請你們參考,首先生命力若是想在工程中運用事務spring 的xml必須開啓事務,如下這些特性通常都是在xml屬性中進行配置。xml

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

相似這種的配置必定要有,不然萬事具有隻欠東風,這個是DB事務有JTA和JPA以及Herbernate等,這裏就不展開說明,可自行百度。blog

Spring事務的傳播行爲案例分析

3、案例解析事務傳播7大行爲

一、無事務,這個時候id 爲16的第一次插入成功,第二次插入的時候失敗,庫中留存第一次的數據

 qqq
無事務運行

二、propagation_required,默認事務的傳播行爲required,在進行實驗2的時候將表中id爲16的數據先刪除以避免影響接下來的測試。@Transactional(propagation=Propagation.REQUIRED) ==  @Transactional這兩個的做用是同樣的沒有事務建立一個事務執行,

<br/>qq'q
事務的傳播特行爲爲required
結果是由於主鍵衝突將事務進行了回滾,因此兩條數據都沒有插入進去。

三、propagation_supports,若是當前程序存在事務就加入該事務運行,若是不存在事務則在非事務中運行

qqq

事務的傳播行爲性爲supports
由於調用方未用事務那麼就在非事務中運行,因此插入了first的第一條數據。

四、propagation_mandatory,必須在一個事務中運行,不然就會拋出異常mandatory 這個單詞有強制性的意思咱們默認用required 而不用mandatory,是由於mandatory不能自動建立事務。

qqq
事務的傳播行爲爲manatory
由於調用的外層沒有事務,因此兩條數據沒有插入。你們想一想下面這種寫法會發生什麼現象
qqq
事務的傳播行爲mandatory

五、propagation_ required _new,無論事務是否是存在,都會另起一個事務,若是事務存在則將當前事務掛起,從新執行新加的事務

qqq
事務的傳播行爲required_new
結果和require同樣,兩條數據都沒有入庫,惟一健衝突致使第一條數據回滾,你們能夠思考下我下面這兩種狀況。

qqq

情景1新起的事務拋出異常會不會讓外圍事務回滾?

Spring事務的傳播行爲案例分析

情景2外圍事務失敗會不會致使新起事務已提交的回滾?

六、 propagation_ not _support,表示不在事務中運行,若是當前存在事務則將事務掛起

qqq<br/>
事務的傳播行爲not_suppoted
這種情景下,若是你根據個人思路一步走的應該能夠想到id 爲17的入庫,第二條主鍵衝突雖然然而notSupportSonTransationsl()這個方法沒有事務因此不影響第一條入庫狀況,可是外圍事務id爲16的要進行回滾了,因此庫中只有一條數據id=17的。

七、 propagation_never,表示當前方法不能運行在事務當中,若是有事務則會拋出異常---->Existing transaction found for transaction marked with propagation 'never'

Spring事務的傳播行爲案例分析
事務的傳播行爲NEVER

八、 propagation_nested,這種嵌套的事務,外圍若是沒有事務則本身另起一個事務,可獨立與外圍事務進行單獨的提交或者回滾(這句話不要理解錯了),下面這個案例一樣的數據一條也沒有落入庫中,

Spring事務的傳播行爲案例分析
事務的傳播行爲nested

事務的傳播行爲級別簡單的演示完畢

做者:宜信技術學院,王巧敏

相關文章
相關標籤/搜索