spring事務提供了兩種管理的的方式:程式設計式事務和宣告式事務
簡單回顧下事務:
事務:邏輯上的一組操作,組成操作的各個單元,要麼全部成功,要麼全部失敗。
事務特性:
原子性:乙個事務包含的各個操作單元不可分割
一致性:事務執行前後資料應當保持一致
隔離性:乙個事務的執行不應當受到其他事務的干擾
永續性:事務執行完之後,資料就被持久化到磁碟上
platformtransactionmanager:平台事務管理器
平台事務管理器:是乙個介面,是spring用於管理事務的真正的物件
datasourcetransactionmanager:底層使用jdbc管理事務的時候的具體實現類
hibernatetransactionmanager:底層使用hibernate管理事務時候的具體實現類
transactiondefinition:事務定義資訊
transactionstatus:事物的狀態
事務狀態:用於記錄事務管理過程中,事務的狀態的物件。
事務管理api的關係:
spring進行事務管理的時候,首先平台事務管理器根據事務定義資訊進行事務的管理,在事務管理過程中,就會產生各種狀態,將這些狀態及資訊記錄到事務狀態的物件中。
spring事務傳播行為主要負責業務層之間互相呼叫的複雜問題。spring會提供7種事務的傳播行為,大概可以分為三類:
假設有a/b兩個方法,各自包含不同的事務操作。
保證多個操作在同乙個事務中
propagation_required(常用):預設值,b事務所在的方法呼叫a事務所在的方法,如果a中有事務,則使用a中的事務(包含b事務),如果a沒有,建立乙個新的事務,將操作包含進來
propagation_mandatory:如果a中有事務,使用a中的事務。如果a沒有事務,丟擲異常。
propagation_supports:支援事務,如果a中有事務,使用a中的事務。如果a沒有事務,不使用事務。
保證多個操作不在同乙個事務中
propagation_requires_new(常用):b事務所在的方法呼叫a事務所在的方法,如果a中有事務,將a的事務掛起(暫停),建立新事務,只包含b自身操作。如果a中沒有事務,建立乙個新事務,包含b自身操作。
propagation_never:如果a中有事務,報異常。
propagation_not_supported:如果a中有事務,將a的事務掛起。不使用事務管理
巢狀式事務
propagation_nested(常用):巢狀事務,b事務所在的方法呼叫a事務所在的方法,如果a中有事務,按照a的事務執行,執行完成後,設定乙個儲存點,執行b中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置(a執行前),也可以回滾到儲存點。
宣告式事務管理:
xml方式宣告事務管理:
註解方式宣告事務管理:配置事務管理器開啟事務註解業務層方式上新增註解
@transactional(propagation = propagation.required,readonly = true)
Spring從入門到放棄
千辛萬苦終於除錯好了idea,開始了第乙個程式的編寫,其中有如下要求 首先在 edu.itgeek.setter 包中,建立介面 phone,在介面中編寫乙個 call 方法 package edu.itgeek.setter public inte ce phone之後建立 phone 介面的實現...
Linux放棄到入門
流星,因為短暫而美麗,劃過黑寂的夜空,釋放出那一閃而逝的光芒,雖然微弱,但卻沒有人能無視它的存在。人生如同流星,充滿了精彩與傳奇,如同一支美麗的傳說,究竟能否想流星那樣短暫,別人決定不了,上天也決定不了,只有自己來掌握,如果願意,流星也可以變成永恆。送給所有正在努力實現理想的朋友們 時間如梭,大學畢...
Linux放棄到入門
流星,因為短暫而美麗,劃過黑寂的夜空,釋放出那一閃而逝的光芒,雖然微弱,但卻沒有人能無視它的存在。人生如同流星,充滿了精彩與傳奇,如同一支美麗的傳說,究竟能否想流星那樣短暫,別人決定不了,上天也決定不了,只有自己來掌握,如果願意,流星也可以變成永恆。送給所有正在努力實現理想的朋友們 時間如梭,大學畢...