1.程式設計式事務
這種需要自己手動編寫事務**的控制方式已經嚴重過時了,因為每個執行dml語句的操作都要編寫乙份這樣的**,相當的麻煩,spring提供了乙個抽象層:plantformtransactionmanager,事務管理器。封裝了資料庫事務幾個方法,
commit、rollback、gettransaction。想在spring平台使用事務,就必須提供乙個
plantformtransactionmanager的子類,spring有乙個實現類:datasourcetransactionmanager。
2.spring事務配置
spring的事務控制是基於aop程式設計思想上實現的,配置檔案中需要的schema:
有tx包的地方也要有aop包。
a) 基本配置步驟:
1.首先宣告乙個datasource,給事務管理器控制這個datasource中的事務
2.宣告乙個spring的事務管理器:
3.定義通知
意義:通知的概念知道aop程式設計的都知道,不多bb ,資料庫事務的前置後置通知的**spring是 已經封裝好了的,直接指定就ok了。transaction-manager預設值是transactionmanager,如果在宣告管理器bean的時候id為transactionmanager,那麼在這裡是
不需要手動指定的,若不是,則手動指定 transaction-manager無論是獲取連線、關閉自動提交、等前置通知,還是異常回滾的異常通知、 業務** 執行完後提交事務的後置通知,spring都幫我們把相關的邏輯封裝好了, 只需要專注自己的業務邏輯即可。
name:
用於指定需要事務支援的方法,update*指的是update開頭的所有方法,以此類推。
propagation(傳播級別):
required:如果父方法沒有事務就建立乙個事務,如果有就使用當前事務。
required_new:無論父方法有沒有事務,都建立乙個新的
supports: 如果父方法沒有事務則使用jdbc的事務(自動提交),否則使用父方法的事務
not_supports:無論父方法有沒有事務,都是用jdbc的事務(掛起父方法的事務)。
mandatory:如果方法沒有執行在spring事務中就丟擲異常,必須在事務環境下執行
never:父方法不能存在事務,有事務就丟擲異常
4.切點關聯
關聯到上方定義的通知即可:
b) 設定回滾事務屬性:
spring事務管理中異常回滾預設情況下只對runtimeexception有效,非執行時異常是不會回滾的。不過<
tx:method>標籤中有兩個屬性可以指定遇到哪種型別的異常時回滾資料:
rollback - for:指定會自動回滾的非執行時異常,io異常、反射異常、sql異常等等。
no - rollback - for:指定不會回滾的執行時異常,空指標、下標越界等等。
事務的回滾規則可以通過@transactional註解或者配置檔案設定:
1.註解:通過rollbackfor 和 norollbackfor 屬性來定義。
這兩個屬性被宣告為 class 型別的, 因此可以為這兩個屬性指定多個異常類:
在 spring 2.x 事務通知中, 可以在
元素中指定回滾規則,如果有不止一種異常, 用逗號分隔:
c) 超時和唯讀屬性
由於事務可以在行和表上獲得鎖,因此長事務會占用資源,並對整體效能產生影響.,
如果乙個事務只讀取資料但不做修改,資料庫引擎可以對這個事務進行優化:
超時事務屬性:
事務在強制回滾之前可以保持多久,這樣可以防止長期執行的事務占用資源
唯讀事務屬性:表示這個事務只讀取資料但不更新資料,這樣可以幫助資料庫引擎優化事務
超時和唯讀屬性可以在 @transactional 註解中定義.超時屬性以秒為單位來計算:
在 spring 2.x 事務通知中,超時和唯讀屬性可以在元素中進行指定:
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...
spring 事務管理
和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...