spring事物的七大傳播機制與五個隔離級別

2021-08-28 03:02:26 字數 1352 閱讀 3013

一、spring事務的傳播機制(hibernatetransactionmanager)

1.如果當前沒有事務,就新建乙個事務;如果已存在乙個事務,就加入到這個事務中。

2.支援當前事務,如果當前沒有事務,以非事務方式執行。

3.使用當前事務,如果當前沒有事務,則丟擲異常。

4.新建事務,如果當前存在事務,則把當前事務掛起。

5.以非事務方式執行,如果當前存在事務,則把當前事務掛起。

6.以非事務方式執行,如果當前存在事務,則丟擲異常。

7.如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與 1. 類似的操作。

二、spring事務隔離級別(isolation level)

isolation_default

這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.

另外四個與jdbc的隔離級別相對應;

isolation_read_uncommitted(未提交讀)

這是事務最低的隔離級別,它充許別外乙個事務可以看到這個事務未提交的資料。 

這種隔離級別會產生髒讀,不可重複讀和幻像讀。

isolation_read_committed(提交讀)

保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。 

這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。

isolation_repeatable_read(可重複讀)

這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。 

它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。

isolation_serializable(序列化)

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

除了防止髒讀,不可重複讀外,還避免了幻像讀。

髒讀:指乙個事務讀取了乙個未提交事務的資料

不可重複讀:在乙個事務內讀取表中的某一行資料,多次讀取結果不同.乙個事務讀取到了另乙個事務提交後的資料.

虛讀(幻讀):在乙個事務內讀取了別的事務插入的資料,導致前後讀取不一致(insert)

五個隔離級別:

髒不幻(金不換)

第乙個是資料庫預設

第二個會出現:髒讀、不可重複讀、幻讀

第三個會出現:不可重複讀、幻讀

第四個會出現:幻讀

第五個全部都不會出現

Spring 事務七大傳播行為

transactional的屬性 propagation,事務傳播行為,列舉型別 propagation。注意 事務傳播行為在同一service類中是無效的,只有在aservice 呼叫 bservice才有效。因為事務處理是通過aop 攔截工作的,在同一service裡呼叫,不會再觸發 方法攔截。...

Spring事物的傳播

spring的事物對於同乙個類內部呼叫是不會生效的。比如乙個servicea,裡面有個方法x 和y 其中x沒有配置事物,而y配置的有實物。如果是乙個沒有事物的serviceb呼叫了servicea的x方法,而在x裡面直接通過this.y 的方式呼叫y方法。那麼y是不會有實物的,就算配置成propag...

spring七大模組

它主要的元件就是beanfactory,是工廠模式的實現。同時beanfactory適用控制反轉 ioc 思想將應用程式的配置和依賴性規範與實際的應用程式分開。spring上下文是乙個配置檔案,向spring框架提供上下文資訊。spring上下文包括企業服務,如jndi ejb 電子郵件 國際化 校...