事務的隔離級別是指若干個併發的事務之間的隔離程度。
在spring中,事務的隔離級別有五種設定方式(isolation屬性的設定方式):
隔離級別
說明default
使用資料庫本身使用的隔離級別:oracle(讀已提交) mysql(可重複讀)
read_uncomitted
讀未提交(髒讀),最低的隔離級別。
read_comitted
讀已提交。oracle預設隔離級別,有不可重複讀和幻讀的風險。
repeatable_read
可重複讀,mysql預設隔離級別,有幻讀的風險
serlalizable
序列化,最高的隔離級別。不管多少事務,依次執行完乙個事務的所有子事務之後,才可以執行另外乙個事務裡面的所有子事務。解決了髒讀、不可重複讀和幻讀的問題。但是消耗大,效能不高。
事務的傳播行為用於指定在多個事務方法間呼叫時,事務是如何在這些方法間傳播的。
在spring中,事務有7中傳播行為:
傳播行為
說明propagation_requierd
如果當前沒有事務,就新建乙個事務,如果已存在乙個事務,則加入到這個事務中,這是最常見的選擇 。即:如果methoda()方法中沒有事務,methodb()方法中有事務,則methodb()中開啟乙個事務;如果methoda()方法有事務,則methodb()加入methoda()的事務中,不需要再開啟乙個事務。
propagation_supports
支援當前事務,如果沒有當前事務,就以非事務方法執行。即:如果methoda()方法中有事務,methodb()方法中有事務;如果methoda()方法沒有事務,methodb()方法中有事務,那麼methodb()異常不回滾。
propagation_mandatory
使用當前事務時,如果沒有當前事務,就丟擲異常。即:如果methoda()方法中有事務,methodb()有事務;如果methodb()方法中沒有事務,methodb()方法中有事務,methodb()異常回滾。
propagation_required_new
新建事務,如果當前存在事務,把當前事務掛起
propagation_not_supported
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
propagation_never
以非事務方式執行操作,如果當前事務存在則丟擲異常。
propagation_nested
如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作
注意:requires_new和nested的區別:
Spring中的事務隔離級別
事務隔離級別定義乙個事務可能受其他事務併發活動的影響程度。另乙個考慮事務隔離級別的角度,是把它想象為事務對於它處理的資料的自私程度。事務的隔離要解決的問題有3個 1,髒讀,即乙個事務讀到另乙個事務還沒有提交的資料。如果另乙個事務失敗了,回滾了,那麼第乙個事務讀到的資料就是無效的資料。這就是髒讀。2,...
spring事務隔離級別
在spring中定義了5中不同的事務隔離級別 1.isolation default 一般情況下使用這種配置既可 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。2.isolation read uncommitted 4 p l.i f k...
Spring 事務隔離級別
資料庫事務的隔離級別有4種,由低到高分為為read uncomitted,read comitted,repeatable read serializable,而且,在事務的併發操作中可能會出現髒讀,不可重複度,虛讀 幻讀 髒讀 read uncomitted 什麼都防不住 乙個事務讀到另外乙個事務...