Spring事務的傳播行為案例分析
網上關於Spring事務傳播性以及隔離型的文章漫天蓋地,還有不負責任的直接複製名詞意思,文章雖然很多卻是看的雲裡霧裡,我們今天將給出案例分別和大家一起學習。
1、spring給出經常面試的考點Spring事務的4個特性含義—-這個很容易理解
2、spring事務傳播特性的定義以及案例分析
一、事務的特性ACID
這四個英文單詞拼寫我一直記不住,求記憶方法
-
原子性(Atomicity):事務是一系列原子操作,要麼全部成功,要麼全部失敗。
-
一致性(Consistency):一旦完成(不管是成功還是失敗),確保它所在的一系列業務狀態保持一致,狀態都是成功,或者都是失敗,不能一部分成功一部分失敗。
-
隔離性(Isolation):不同事務同時進行某項業務,處理相同的資料時候,需要保證事務之間相互獨立,互相之間資料不影響。
-
永續性(Durability):一旦事務完成,無論發生什麼系統性錯誤,事務執行後的資料都被持久化了,不會因為重啟或其他操作對資料進行更改。
二、spring事務傳播特性的定義以及案例分析
我們先給出定義再分別進行簡單的程式碼分析
給出百度圖片,請大家參考,首先生命力如果想在工程中運用事務spring 的xml必須開啟事務,以下這些特性一般都是在xml屬性中進行配置。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
類似這種的配置一定要有,否則萬事具備只欠東風,這個是DB事務有JTA和JPA以及Herbernate等,這裡就不展開說明,可自行百度。
三、案例解析事務傳播7大行為
1、無事務,這個時候id 為16的第一次插入成功,第二次插入的時候失敗,庫中留存第一次的資料
無事務執行
2、propagation_required,預設事務的傳播行為required,在進行實驗2的時候將表中id為16的資料先刪除以免影響接下來的測試。 @Transactional(propagation=Propagation.REQUIRED) == @Transactional這兩個的作用是一樣的沒有事務建立一個事務執行,
事務的傳播特行為為required
結果是因為主鍵衝突將事務進行了回滾,所以兩條資料都沒有插入進去。
3、propagation_supports,如果當前程式存在事務就加入該事務執行,如果不存在事務則在非事務中執行
事務的傳播行為性為supports
因為呼叫方未用事務那麼就在非事務中執行,所以插入了first的第一條資料。
4、propagation_mandatory,必須在一個事務中執行,否則就會丟擲異常mandatory 這個單詞有強制性的意思我們預設用required 而不用mandatory,是因為mandatory不能自動建立事務。
事務的傳播行為為manatory
因為呼叫的外層沒有事務,所以兩條資料沒有插入。大家想想下面這種寫法會發生什麼現象
事務的傳播行為mandatory
5、propagation_ required _new,不管事務是不是存在,都會另起一個事務,如果事務存在則將當前事務掛起,重新執行新加的事務
事務的傳播行為required_new
結果和require一樣,兩條資料都沒有入庫,唯一健衝突導致第一條資料回滾,大家可以思考下我下面這兩種情況。
情景1新起的事務丟擲異常會不會讓外圍事務回滾?
情景2外圍事務失敗會不會導致新起事務已提交的回滾?
6、 propagation_ not _support,表示不在事務中執行,如果當前存在事務則將事務掛起
事務的傳播行為not_suppoted
這種情景下,如果你根據我的思路一步走的應該可以想到id 為17的入庫,第二條主鍵衝突雖然然而notSupportSonTransationsl()這個方法沒有事務所以不影響第一條入庫情況,但是外圍事務id為16的要進行回滾了,所以庫中只有一條資料id=17的。
7、 propagation_never,表示當前方法不能執行在事務當中,如果有事務則會丟擲異常——>Existing transaction found for transaction marked with propagation ‘never’
事務的傳播行為NEVER
8、 propagation_nested,這種巢狀的事務,外圍如果沒有事務則自己另起一個事務,可獨立與外圍事務進行單獨的提交或者回滾(這句話不要理解錯了),下面這個案例同樣的資料一條也沒有落入庫中,
事務的傳播行為nested
事務的傳播行為級別簡單的演示完畢
作者:宜信技術學院,王巧敏
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2710394/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring事務傳播行為Spring
- Spring 事務傳播行為Spring
- 通過實際案例摸清楚Spring事務傳播的行為Spring
- spring事務的傳播Spring
- spring的事務傳播機制Spring
- Spring事務的傳播屬性Spring
- spring事務之傳播性Spring
- spring事務傳播機制Spring
- Spring的事務管理(一) Spring事務管理的實現,事務的屬性(隔離級別,傳播行為,只讀)Spring
- Spring 七種事務傳播性介紹Spring
- Spring Boot事務傳播機制 - DZone JavaSpring BootJava
- [轉帖]帶你讀懂Spring 事務——事務的傳播機制Spring
- CRUD更要知道的Spring事務傳播機制Spring
- 什麼是事務、事務特性、事務隔離級別、spring事務傳播特性?Spring
- java spring巢狀事務詳情和事務傳播型別JavaSpring巢狀型別
- 事務回顧之事務特性_併發問題_隔離級別_傳播行為
- [轉帖]Spring事務傳播屬性之REQUIRES_NEW用法SpringUI
- spring事務的傳播屬性是什麼?它會影響什麼?Spring
- 18個示例詳解 Spring 事務傳播機制(附測試原始碼)Spring原始碼
- 事務傳播機制之REQUIRES_NEWUI
- spring事務管理原始碼分析(二)事務處理流程分析Spring原始碼
- spring事務傳播的Propagation.REQUIRES_NEW以及NEVER MANDATORY驗證,及其失效的詭異問題SpringUI
- 《四 spring原始碼》spring的事務註解@Transactional 原理分析Spring原始碼
- Springboot mini - Solon詳解(四)- Solon的事務傳播機制Spring Boot
- Spring的事務管理Spring
- spring事務管理原始碼分析(一)配置和事務增強代理的生成流程Spring原始碼
- spring事務Spring
- Spring 事務Spring
- Spring事務專題(四)Spring中事務的使用、抽象機制及模擬Spring事務實現Spring抽象
- Spring多執行緒事務處理Spring執行緒
- Spring的事務管理(二)宣告式事務管理Spring
- Spring 中的事務管理Spring
- 聊聊spring事務的propagationSpring
- Spring 事務管理Spring
- ?在Spring事務管理下,Synchronized為啥還執行緒不安全?Springsynchronized執行緒
- 分散式事務之Spring事務與JMS事務(二)分散式Spring
- Spring事務專題(五)聊聊Spring事務到底是如何實現的Spring
- 【Spring】看了這篇Spring事務原理,我才知道我對Spring事務的誤解有多深!Spring