spring 的事務管理是基於 aop 實現的,而 aop 是以方法為單位的。spring 的事務屬性分別為傳播行為、隔離級別、唯讀和超時屬性,這些屬性提供了事務應用的方法和描述策略。
在 j**a ee 開發經常採用的分層模式中,spring 的事務處理位於業務邏輯層,它提供了針對事務的解決方案。
在 spring 解壓包的 libs 目錄中,包含乙個名稱為 spring-tx-3.2.13.release.jar 的檔案,該檔案是 spring 提供的用於事務管理的 jar 包,其中包括事務管理的三個核心介面:platformtransactionmanager、transactiondefinition 和 transactionstatus。
將該 jar 包的字尾名 jar 改成 zip 的形式後,解壓壓縮包,進入解壓資料夾中的 \org\springframework\transaction 目錄後,該目錄中的檔案如圖 1 所示。
事務管理核心介面
圖 1 事務管理核心介面
在圖 1 中,方框所標註的三個檔案就是本節將要講解的核心介面。這三個核心介面的作用及其提供的方法如下。
1. platformtransactionmanager
platformtransactionmanager 介面是 spring 提供的平台事務管理器,用於管理事務。該介面中提供了三個事務操作方法,具體如下。
transactionstatus gettransaction(transactiondefinition definition):用於獲取事務狀態資訊。
void commit(transactionstatus status):用於提交事務。
void rollback(transactionstatus status):用於回滾事務。
在專案中,spring 將 xml 中配置的事務詳細資訊封裝到物件 transactiondefinition 中,然後通過事務管理器的 gettransaction() 方法獲得事務的狀態(transactionstatus),並對事務進行下一步的操作。
2. transactiondefinition
transactiondefinition 介面是事務定義(描述)的物件,它提供了事務相關資訊獲取的方法,其中包括五個操作,具體如下。
string getname():獲取事務物件名稱。
int getisolationlevel():獲取事務的隔離級別。
int getpropagationbeh**ior():獲取事務的傳播行為。
int gettimeout():獲取事務的超時時間。
boolean isreadonly():獲取事務是否唯讀。
在上述五個方法的描述中,事務的傳播行為是指在同乙個方法中,不同操作前後所使用的事務。傳播行為的種類如表 1 所示。
表 1 傳播行為的種類
屬性名稱值描 述
propagation_requiredrequired支援當前事務。如果 a 方法已經在事務中,則 b 事務將直接使用。否則將建立新事務
propagation_supportssupports支援當前事務。如果 a 方法已經在事務中,則 b 事務將直接使用。否則將以非事務狀態執行
propagation_mandatorymandatory支援當前事務。如果 a 方法沒有事務,則丟擲異常
propagation_requires_newrequires_new將建立新的事務,如果 a 方法已經在事務中,則將 a 事務掛起
propagation_not_supportednot_supported不支援當前事務,總是以非事務狀態執行。如果 a 方法已經在事務中,則將其掛起
propagation_nevernever不支援當前事務,如果 a 方法在事務中,則丟擲異常
propagation.nestednested巢狀事務,底層將使用 s**epoint 形成巢狀事務
在事務管理過程中,傳播行為可以控制是否需要建立事務以及如何建立事務。
通常情況下,資料的查詢不會改變原資料,所以不需要進行事務管理,而對於資料的增加、修改和刪除等操作,必須進行事務管理。如果沒有指定事務的傳播行為,則 spring3 預設的傳播行為是 required。
3. transactionstatus
transactionstatus 介面是事務的狀態,它描述了某一時間點上事務的狀態資訊。其中包含六個操作,具體如表 2 所示。
表 2 事務的操作
名稱說明
void flush()重新整理事務
boolean hass**epoint()獲取是否存在儲存點
boolean iscompleted()獲取事務是否完成
boolean isnewtransaction()獲取是否是新事務
boolean isrollbackonly()獲取是否回滾
void setrollbackonly()設定事務回滾
大三學習進度67
sort 方法可以指定公升序或降序排序。sort 方法第乙個引數為要排序的字段,第二個字段指定排序規則,1為公升序,1為降序,預設為公升序。對欄位 alexa 按公升序排序 usr bin python3importpymongomyclient pymongo.mongoclient mongod...
大三學習進度50
建造者模式 builder pattern 使用多個簡單的物件一步一步構建成乙個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。乙個 builder 類會一步一步構造最終的物件。該 builder 類是獨立於其他物件的。意圖 將乙個複雜的構建與其表示相分離,使得同樣的構...
大三學習進度44
1.建立專案 在 myeclipse 中建立乙個名稱為 springdemo03 的 web 專案,將 spring 支援和依賴的 jar 包複製到 web 專案的 web inf lib 目錄中,並發布到類路徑下。2.建立介面 customerdao 在專案的 src 目錄下建立乙個名為 com....