spring事務隔離和傳播機制的簡單理解
一、spring事務的傳播機制(HibernateTransactionManager)
1)、<tx:method name="*" propagation="REQUIRED" /> 如果當前沒有事務,就新建一個事務;如果已存在一個事務,就加入到這個事務中。
2)、<tx:method name="*" propagation="SUPPORTS" /> 支援當前事務,如果當前沒有事務,以非事務方式執行。
3)、<tx:method name="*" propagation="MANDATORY" />使用當前事務,如果當前沒有事務,則丟擲異常。
4)、<tx:method name="*" propagation="REQUIRES_NEW"
/>新建事務,如果當前存在事務,則把當前事務掛起。
5)、<tx:method name="*" propagation="NOT_SUPPORTED"
/>以非事務方式執行,如果當前存在事務,則把當前事務掛起。
6)、<tx:method name="*" propagation="NEVER" />以非事務方式執行,如果當前存在事務,則丟擲異常。
7)、<tx:method name="*" propagation="
二、spring事務隔離級別(Isolation Level)
1)、Serializable: 事務序列執行,提供嚴格的事務隔離,它要求事務序列化執行,事務只能一個接著一個地執行,不能併發執行,資源消耗最大。
2)、Repeatable Read:可重複讀取,保證了一個事務不會修改已經由另一個事務讀取但未提交(回滾)的資料,避免了“髒讀取”和“不可重複讀取”的情況,但是帶來了更多的效能損耗。
3)、Read Committed:授權讀取,大多數主流資料庫的預設事務等級,保證了一個事務不會讀到另一個並行事務已經修改但未提交的資料,避免了“髒讀取”。
4)、Read Uncommitted:未授權讀取,保證讀取過程中不會讀到方法資料,隔離級別在於處理多事務併發問題。該隔離級別可以通過 “排他寫鎖”實現。事務隔離的最低級別,僅可保證不讀取物理損壞的資料。與READ COMMITTED 隔離級相反,它允許讀取已經被其它使用者修改但尚未提交確定的資料。
5)、隔離級別 更新丟失 髒讀取
重複讀取 幻讀
Read Uncommitted N Y Y Y
Read Committed N N Y Y
Repeatable Read N N N Y
Serializable N N N N