一、事務定義是做什麼用的?
告訴管理者需要對業務進行什麼事務框架
二、事務定義的幾種方式?可以定義些什麼?
- xml2、註解方式。@Transactional
定義只讀,傳播行爲,發生異常回滾,超時回滾
三、隔離級別:
事務隔離級別,即事務工作之間的隔離程度,數據之間的可互訪性
參考來源:https://www.cnblogs.com/WJ-163/p/6023054.html
Read uncommitted<Read committed<Repeatable read<Serializable
1. ISOLATION_READ_UNCOMMITTED:這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數據。
這種隔離級別會產生髒讀,不可重複讀和幻像讀。
2. ISOLATION_READ_COMMITTED:保證一個事務修改的數據提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據
3. ISOLATION_REPEATABLE_READ:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。
它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重複讀)。
4. ISOLATION_SERIALIZABLE:這是花費最高代價但是最可靠的事務隔離級別。事務被處理爲順序執行。
除了防止髒讀,不可重複讀外,還避免了幻像讀。
四、7種傳播行爲
1、PROPAGATION_REQUIRED:當前有事務加入事務,否則創建一個新的事務。該設置是最常用的設置。
2、PROPAGATION_SUPPORTS:支持當前事務,有事務加入沒有則非事務運行
3、PROPAGATION_MANDATORY:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就拋出異常。
4、PROPAGATION_REQUIRES_NEW:無論當前存不存在事務,都創建新事務。
5、PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6、PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
7、PROPAGATION_NESTED:若當前存在事務,嵌套事務。如果當前沒有,則執行與PROPAGATION_REQUIRED類似的操作
五、其他
1.事務切面可以定義在那些層?
定義在Service層
2.TransactionManager會有很多種嗎?
事務管理器可能會有多種:jdbc,mybatis、hibernate、jpa
3.什麼是本地事務?什麼是分佈式事務?
本地事務就是數據庫事務,只有一個數據源時,即本地事務,多個數據源即是分佈式事務
4.各種方式的事務邏輯是一樣的嗎?
不是,是有區別的。
5.我們在代碼中應用事務管理的方式是統一的嗎?
是spring裏的方式是統一的,管理控制一樣,xml和註解方式的區別是實現類Bean不一樣
6.架構spring事務管理建模
單一數據源:
分佈式事務:
7.如何讓事務應用者(框架使用者)對這些變化透明?
答:抽象,面向接口編程,策略模式。 PlatformTransationManager。
8.如何表示用戶的事務定義?
答:TransationDefinition
9.如何表示開啓的事務?
答:TransationStatus。
讀數據源事務管理的源碼時,需要驗證三點:1、是否把連接放到了線程上下文,3是否是同一個連接,3、查看事務的傳播