Spring入門學習(事務的其它屬性) 第二十一節

2021-09-08 19:24:45 字數 1734 閱讀 7992

使用isolation指定事務的隔離級別,最常用的取值為read_committed

預設情況下spring 的宣告式事務對所有的執行時異常進行回滾,也可以通過對應的屬性進行設定,通常情況下取預設值即可。

此時測試:

@test

public

void

testbookshopservice()

由於當前餘額只有30,所以發生異常後事務會回滾,餘額和庫存都不會發生變化。

當我們使用norollbackfor指定那些異常不會滾後:

@transactional

(propagation=propagation.requires_new,

isolation=isolation.read_committed,

norollbackfor=

)

再次執行後,雖然發生了餘額不足的異常,但是1001的庫存還是減少了乙個,即useraccountexception異常不會回滾,通常情況下取預設值即可。

使用readonly指定事務是否為唯讀,表示這個事務只讀取但不進行更新,這樣可以幫助資料庫引擎優化事務。若真的只是乙個讀取資料庫值的方法,應設定readonly=true

使用timeout指定強制回滾之前事務可以占用的時間。

修改aa餘額為3000,超時時間timeout =3purchase中睡眠2s,此時可以購買成功。

@transactional

(propagation=propagation.requires_new,

isolation=isolation.read_committed,

readonly=

false

, timeout=3)

@override

public

void

purchase

(string username, string isbn)

catch

(interruptedexception e)

// 1.獲取書的單價

int price = bookshopdao.

findbookpricebyisbn

(isbn)

;// 2.更新書的庫存

bookshopdao.

updatebookstock

(isbn)

;// 3.更新使用者餘額

bookshopdao.

updateuseraccount

(username, price)

;}

測試方法:
@test

public

void

testbookshopservice()

執行結果:執行成功,1001庫存減1本,餘額2900。

此時將睡眠時間改為5sthread.sleep(5000);,會由於超時而回滾,庫存和餘額都不會發生變化。

測試結果如下:

Spring 事務 學習

事務就是一系列的動作,它們被當作乙個單獨的工作單元。這些動作要麼全部完成,要麼全部不起作用 事務的四個關鍵屬性 acid 1 原子性 atomicity 事務室乙個原子操作,有一系列動作組成。事務的原子性確保動作要麼全部完成,要麼完全不起作用 2 一致性 consistency 一旦所有事務動作完成...

spring入門到放棄 spring事務管理

spring事務提供了兩種管理的的方式 程式設計式事務和宣告式事務 簡單回顧下事務 事務 邏輯上的一組操作,組成操作的各個單元,要麼全部成功,要麼全部失敗。事務特性 原子性 乙個事務包含的各個操作單元不可分割 一致性 事務執行前後資料應當保持一致 隔離性 乙個事務的執行不應當受到其他事務的干擾 永續...

spring再學習(二) spring事務

與關係型資料庫一致,事務都遵循 acid 原則 spring支援程式設計式事務管理以及宣告式事務管理兩種方式。在spring框架,用註解開啟事務 transactional,當然事務有其特性 spring事務的傳播行為有7種 spring在事務中使用isolation來配置它 isolation r...