JavaWeb 筆記之 Spring 的事務管理

2021-08-28 23:56:05 字數 3467 閱讀 8502

事務概念及屬性

spring 的事務管理

宣告式事務管理

使用 @transactional 註解標註事務注意:

為了將方法定義為支援事務處理的, 可以為方法新增 @transactional 註解. 根據 spring aop 基於**機制, 只能標註公有方法.

可以在方法或者類級別上新增 @transactional 註解. 當把這個註解應用到類上時, 這個類中的所有公共方法都會被定義成支援事務處理的.

在 bean 配置檔案中只需要啟用 元素, 並為之指定事務管理器就可以了.

如果事務處理器的名稱是 transactionmanager, 就可以在元素中省略 transaction-manager 屬性. 這個元素會自動檢測該名稱的事務處理器.

@service("bookshopservice")

public class bookshopserviceimpl implements bookshopservice

}

事務的傳播行為

傳播屬性

描述required如果有事物執行,當前的方法就在這個事務內執行,否則就啟用新的事務,並在自己的事務內執行

requires_new當前的方法必須啟動新事物,並在自己的是事務內執行,如果有事務執行,應該將它掛起

support

如果有事務執行,當前的方法就在這個事務內執行,否則它可以不執行在事務中

not_support

當前的方法不應該執行在事務中,如果有執行的事務將它掛起

mandatory

當前的方法必須執行在事務內部,如果沒有正在執行是事務,就丟擲異常

never

當前的方法不應該執行在事務中,如果有執行的事務,就丟擲異常

nested

如果有事務在執行,當前的方法就應該在這個事務的巢狀事務內執行,否則就啟動乙個新事物,並在它自己的事務內執行

當 bookservice 的 purchase() 方法被另乙個事務方法 checkout() 呼叫時, 它缺省會在現有的事務內執行. 這個預設的傳播行為就是 required. 因此在 checkout() 方法的開始和終止邊界內只有乙個事務. 這個事務只在 checkout() 方法結束的時候被提交, 結果使用者一本書都買不了

事務傳播屬性可以在 @transactional 註解的 propagation 屬性中定義

@service("bookshopservice")

public class bookshopserviceimpl implements bookshopservice

}@service("cashier")

public class cashierimpl implements cashier

}}

requires_new 傳播行為示例

另一種常見的傳播行為是 requires_new. 它表示該方法必須啟動乙個新事務, 並在自己的事務內執行. 如果有事務在執行, 就應該先掛起它.

@transactional(propagation=propagation.requires_new)

public void purchase(string isbn, string username) {}

事務的隔離級別

spring支援的四種事務隔離級別

隔離級別

描述default

使用底層資料庫的預設隔離級別,對於大多數資料庫來說,預設隔離級別都是read_commited

read_uncommitted

允許事務讀取未被其他事務提交的變更,髒讀、不可重複讀和幻讀的問題都會出現

read_commited

只允許事務讀取已經被其他事務提交的變更,可以避免髒讀,但不可重複讀和幻讀仍然會出現

repeatable_read

確保事務可以多次從乙個欄位中讀相同的值,在這事務持續時間,禁止其他事務對這個字段進行更新,可以避免髒讀和不可重複讀,但幻讀仍然存在

seriaizable

確保事務可以從乙個表中讀取相同的行,在這個事務持續期間,禁止其他事務對該錶執行插入、更新和刪除操作,所有併發問題都可避免,但效能低下

事務的隔離級別要得到底層資料庫引擎的支援, 而不是應用程式或者框架的支援. (oracle 支援的 2 種事務隔離級別:read_commited , serializable ,mysql 支援 4 中事務隔離級別.)

設定事務隔離屬性

@transactional(propagation=propagation.requires_new,isolation=isolation.read_committed)

@override

public void purchase(string isbn, string username) {}

設定回滾事務屬性

@transactional(propagation=propagation.requires_new,isolation=isolation.read_committed,rollbackfor=,norollbackfor=arithmeticexception.class)

public void purchase(string isbn, string username) {}

設定超時和唯讀屬性

@transactional(propagation=propagation.requires_new,isolation=isolation.read_committed,rollbackfor=,norollbackfor=arithmeticexception.class,readonly=true,timeout=30)

@override

public void purchase(string isbn, string username) {

基於xml方式配置事務管理(程式設計式事務管理)

SpringMVC學習筆記之與Spring的關係

需要進行 spring 整合 springmvc 嗎 還是否需要再加入 spring 的 ioc 容器嗎 是否需要再 web.xml 檔案中配置啟動 spring ioc 容器 contextloaderlistener 嗎 需要 通常情況下,類似於資料來源 事務 整合其它框架都是放在spring ...

java web初學筆記之

pagecontext作用域 當前頁面,也就是只要跳轉到別的頁面就失效了。如果把變數放到pagecontext裡,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裡。其生命週期即把該變數放到pagecontext開始到jsp頁面結束。如果num變數是pagecontext作用域的,則當訪問...

JavaWeb自學之html學習筆記 Day 2

5 影象標籤 src 的路徑 width 的寬度 height 的高度 alt 上顯示的文字 相容性差,有些瀏覽器不顯示此屬性,不重要 6 路徑的介紹 分類 兩類 絕對路徑 c users administrator desktop html學習筆記 相對路徑 乙個檔案相對於另外乙個檔案的位置 三種...