1. 程式人生 > >spring事務隔離和傳播機制的簡單理解

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="

NESTED" />如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行         與PROPAGATION_REQUIRED類似的操作。

二、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