spring入門到放棄 spring事務管理

2021-08-29 18:04:45 字數 2547 閱讀 8816

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放棄到入門

流星,因為短暫而美麗,劃過黑寂的夜空,釋放出那一閃而逝的光芒,雖然微弱,但卻沒有人能無視它的存在。人生如同流星,充滿了精彩與傳奇,如同一支美麗的傳說,究竟能否想流星那樣短暫,別人決定不了,上天也決定不了,只有自己來掌握,如果願意,流星也可以變成永恆。送給所有正在努力實現理想的朋友們 時間如梭,大學畢...