Spring 事務隔離級別與傳播特性

2022-06-06 12:45:12 字數 1517 閱讀 2263

1. 原理

a. spring事務的本質就是資料庫對事務的支援,沒有資料庫事務的支援,spring是無法提供事務功能的;

b. 純jdbc操作步驟

獲取連線:connection conn = drivermanager.getconnection();

開啟事務:conn.setautocommit(true/false);

執行crud

提交或回滾事務:conn.commit() / conn.rollback();

關閉連線:conn.close();

c. spring自動完成開啟事務或提交、回滾事務這兩步,只需要在配置類加上開啟@enabletransactionmanagement註解驅動,然後在相關類和方法上加上@transactional註解;

d. 真正的資料庫層的事務提交和回滾是通過binlog和redolog實現的。

2.  spring中的隔離級別

a. default:這 platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別;

b. read uncommitted:這是事務最低的隔離級別,它充許另外乙個事務可以看到這個事務未提交的資料,這種隔離級別會產生髒讀,不可重複讀和幻讀;

c. read committed:保證乙個事務修改的資料提交後才能被另外乙個事務讀取,另外乙個事務不能讀取該事務未提交的資料,這種隔離級別會產生不可重複讀和幻讀;

d. repeatable read:這種事務隔離級別可以防止髒讀,不可重複讀,但是可能出現幻讀;

e. serializable:這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。

3. 事務的傳播特性

a. required:支援當前事務,如果當前沒有事務,就新建乙個事務,這是spring預設的事務的傳播;

b. supports:支援當前事務,如果當前沒有事務,就以非事務方式執行;

c. mandatory:支援當前事務,如果當前沒有事務,就丟擲異常;

d. requireds new:新建事務,如果當前存在事務,把當前事務掛起。新建的事務將和被掛起的事務沒有任何關係,是兩個獨立的事務,外層事務失敗回滾之後,不能回滾內層事務執行的結果,內層事務失敗丟擲異常,外層事務捕獲,也可以不處理回滾操作;

e. not supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起;

f. never:以非事務方式執行,如果當前存在事務,則丟擲異常;

g. nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中。如果沒有活動事務,則按required屬性執行。它使用了乙個單獨的事務,這個事務擁有多個可以回滾的儲存點。內部事務的回滾不會對外部事務造成影響。它只對datasourcetransactionmanager事務管理器起效。

Spring 事務 傳播行為 隔離級別

資料庫事務併發問題 隔離級別 各個隔離級別解決併發問題的能力 當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有的事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。事務的傳播行為可以由傳播屬性指定。spring 定義了 7 種傳播行為。如果有事務在執行,當前的...

spring事務的傳播行為與隔離級別

首先,要了解的是什麼是資料庫的隔離級別。在乙個典型的應用中,併發是不可避免的,多個事務併發執行,操作同乙個資料來完成任務。併發可能會導致以下問題 髒讀 dirty read 髒讀發生在乙個事務讀取了被另乙個事務改寫但還未提交的資料時。如果這些改變在稍後被回滾,那麼之前的事務讀取的到資料就是無效的。不...

Spring事務傳播機制和隔離級別

事務的傳播機制是指新增事務時的策略。傳播機制共有以下幾種 propagation mandatory 當前事務必須在乙個已有事務環境中執行,否則丟擲異常 propagation required propagation requires new propagation nested 這三種傳播機制不...