Spring之宣告式事務TX

2021-10-06 22:02:26 字數 2662 閱讀 9622

[1]為什麼使用事務?

學習mybatis的時候,mybatis中的事務和jdbc事務是一致的,那麼spring中式如何進行事務管理的呢?

[2]事務管理的方式

程式設計式事務:整個事務管理都是需要程式設計師自己手動編寫,自己提交或者回滾

宣告式事務:就是整個事務的管理操作,不需要我們自己書寫,現在spring已經幫你處理好了,我們自己只要**中宣告配置即可。

[3]事務使用的場景

當我們執行的是兩條或者兩條以上的新增、修改、刪除的時候才使用事務

[4]使用spring 中宣告式事務

給方法增加事務就是給切點增加通知

切點:需要的方法

通知:事務

構成切面

[5]使用的注意事項

(1)增加事務的**塊不可以自己捕獲異常,如果自己進行了異常的捕獲,spring就沒有辦法得知此事務的異常,這個時候配置的宣告式事務就不再起作用

(2) 如果我們就需要書寫try  catch語句還要結合宣告式事務,這個時候就需要自己手動拋異常

[6]**實現

1.原子性(atomicity):乙個事務必須視為乙個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾,對於乙個事務來說,不可能只執行其中的一部分操作,這就是事務的原子性。

2.一致性(consistency):資料庫總數從乙個一致性的狀態轉換到另乙個一致性的狀態。

3.隔離性(isolation):乙個事務所做的操作(新增、修改、刪除)在最終提交以前,對其他事務是不可見的。

4.永續性(durability):一旦事務提交,則其所做的操作(新增、修改、刪除)就會永久儲存到資料庫中。此時即使系統崩潰,修改的資料也不會丟失。

spring的事務管理配置屬性講解:

1. name="" 哪些方法需要有事務控制

1.1 支援*萬用字元

2. readonly="boolean" 是否是唯讀事務.

2.1 如果為true,告訴資料庫此事務為唯讀事務.資料化優化,會對效能有一定提公升,所以只要是查詢的方法,建議使用此資料.

2.2 如果為false(預設值),事務需要提交的事務.建議新增,刪除,修改.

3. propagation 控制事務傳播行為.

3.1 當乙個具有事務控制的方法被另乙個有事務控制的方法呼叫後,需要如何管理事務(新建事務?在事務中執行?把事務掛起?報異常?)

3.2 required (預設值): 如果當前有事務,就在事務中執行,如果當前沒有事務,新建乙個事務.

3.3 supports:如果當前有事務就在事務中執行,如果當前沒有事務,就在非事務狀態下執行.

3.4   mandatory:必須在事務內部執行,如果當前有事務,就在事務中執行,如果沒有事務,報錯.

3.5 requires_new:必須在事務中執行,如果當前沒有事務,新建事務,如果當前有事務,把當前事務掛起.

3.6 not_supported:必須在非事務下執行,如果當前沒有事務,正常執行,如果當前有事務,把當前事務掛起.

3.7 never:必須在非事務狀態下執行,如果當前沒有事務,正常執行,如果當前有事務,報錯.

3.8 nested:必須在事務狀態下執行.如果沒有事務,新建事務,如果當前有事務,建立乙個巢狀事務.

4. isolation="" 事務隔離級別

在多執行緒或併發訪問下如何保證訪問到的資料具有完整性的.

4.2 髒讀:

4.2.1 乙個事務(a)讀取到另乙個事務(b)中未提交的資料,另乙個事務中資料可能進行了改變,此時a事務讀取的資料可能和資料庫中資料是不一致的,此時認為資料是髒資料,讀取髒資料過程叫做髒讀.

4.3 不可重複讀:

4.3.1 主要針對的是某行資料.(或行中某列)

4.3.2 主要針對的操作是修改操作.

4.3.3 兩次讀取在同乙個事務內

4.3.4 當事務a第一次讀取事務後,事務b對事務a讀取的資料進行修改,事務a中再次讀取的資料和之前讀取的資料不一致,過程不可重複讀.

4.4 幻讀:

4.4.1 主要針對的操作是新增或刪除

4.4.2 兩次事務的結果.

4.4.3 事務a按照特定條件查詢出結果,事務b新增了一條符合條件的資料.事務a中查詢的資料和資料庫中的資料不一致的,事務a好像出現了幻覺,這種情況稱為幻讀.

4.5 default: 預設值,由底層資料庫自動判斷應該使用什麼隔離界別

4.6 read_uncommitted: 可以讀取未提交資料,可能出現髒讀,不重複讀,幻讀.

4.6.1 效率最高.

4.7 read_committed:只能讀取其他事務已提交資料.可以防止髒讀,可能出現不可重複讀和幻讀.

4.8 repeatable_read: 讀取的資料被新增鎖,防止其他事務修改此資料,可以防止不可重複讀.髒讀,可能出現幻讀.

4.9 serializable: 排隊操作,對整個表新增鎖.乙個事務在運算元據時,另乙個事務等待事務操作完成後才能操作這個表.

4.9.1 最安全的

4.9.2 效率最低的.

5. rollback-for="異常型別全限定路徑"

5.1 當出現什麼異常時需要進行回滾

5.2 建議:給定該屬性值.

5.2.1 手動拋異常一定要給該屬性值.

6. no-rollback-for=""

6.1 當出現什麼異常時不滾回事務.

11 Spring教程之宣告式事務

事務就是把一系列的動作當成乙個獨立的工作單元,這些動作要麼全部完成,要麼全部不起作用。事務四個屬性acid 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 測試將上面的 拷貝到乙個新專案中 在之前的案例中,我們給userdao介面...

Spring宣告式事務

net.sf.hibernate.dialect.oracle9dialect false true net.sf.hibernate.transaction.jdbctransactionfactory 1025 用heibernate來管理事務 當用spring和heibernate一起完成da...

spring宣告式事務

1.什麼是事務 事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性 要麼成功,要麼失敗 2.事務的特性 事務特性分為四個 原子性 atomicity 一致性 consistency 隔離性 isolation 持續性 durability ...