Spring事務的管理

2021-10-24 08:51:08 字數 1945 閱讀 5453

事務的產生,其實是為了當應用程式訪問資料庫的時候,事務能夠簡化我們的程式設計模型,不需要我們去考慮各種各樣的潛在錯誤和併發問題.可以想一下當我們使用事務時,要麼提交,要麼回滾,我們不會去考慮網路異常了,伺服器宕機了,同時更改乙個資料怎麼辦對吧?

事務的提交是指事務裡的所有操作都正常完成。

事務的回滾是指程式或資料處理錯誤,將程式或資料恢復到上一次正確狀態的行為。

簡而言之,事務就是去解決各種各樣的潛在錯誤和併發問題.

在我們剛開始學習或者沒有spring幫我們管理事務時候,我們**是這樣的

connection conn = drivermanager.

getconnection()

;try

catch

(exception e)

finally

 事務:邏輯上的一組操作,組成這組操作的各個單元,要麼全都成功,要麼全都失敗。

 原子性:事務不可分割

 一致性:事務執行前後資料完整性保持一致

 隔離性:乙個事務的執行不應該受到其他事務的干擾

 永續性:一旦事務結束,資料就持久化到資料庫

 讀問題

 髒讀 :乙個事務讀到另乙個事務未提交的資料

 不可重複讀 :乙個事務讀到另乙個事務已經提交的update的資料,導致乙個事務中多次查詢結果不一致

 虛讀、幻讀 :乙個事務讀到另乙個事務已經提交的insert的資料,導致乙個事務中多次查詢結果不一致。

 寫問題

 丟失更新

 設定事務的隔離級別

 read uncommitted :未提交讀,任何讀問題解決不了。

 read committed :已提交讀,解決髒讀,但是不可重複讀和虛讀有可能發生。

 repeatable read :重複讀,解決髒讀和不可重複讀,但是虛讀有可能發生。

 serializable :解決所有讀問題。

 平台事務管理器:介面,是spring用於管理事務的真正的物件。

 datasourcetransactionmanager :底層使用jdbc管理事務

 hibernatetransactionmanager :底層使用hibernate管理事務

 事務狀態:用於記錄在事務管理過程中,事務的狀態的物件。

spring進行事務管理的時候,首先平台事務管理器根據事務定義資訊進行事務的管理,在事務管理過程中,產生各種狀態,將這些狀態的資訊記錄到事務狀態的物件中。

 spring中提供了七種事務的傳播行為:

          保證多個操作在同乙個事務中

 propagation_required :預設值,如果a中有事務,使用a中的事務,如果a沒有,建立乙個新的事務,將操作包含進來

 propagation_supports :支援事務,如果a中有事務,使用a中的事務。如果a沒有事務,不使用事務。

 propagation_mandatory :如果a中有事務,使用a中的事務。如果a沒有事務,丟擲異常。

          保證多個操作不在同乙個事務中

 propagation_requires_new :如果a中有事務,將a的事務掛起(暫停),建立新事務,只包含自身操作。如果a中沒有事務,建立乙個新事務,包含自身操作。

 propagation_not_supported :如果a中有事務,將a的事務掛起。不使用事務管理。

 propagation_never :如果a中有事務,報異常。

          巢狀式事務

 propagation_nested :巢狀事務,如果a中有事務,按照a的事務執行,執行完成後,設定乙個儲存點,執行b中的操作,如果沒有異常,執行通過,如果有異常,可以選擇回滾到最初始位置,也可以回滾到儲存點。

spring提供了兩種事務管理的方式:程式設計式事務管理和宣告式事務管理,這裡我們看一下宣告式事務管理.

Spring事務的管理

1 程式設計式事務管理 通過 transactiontemplate或者transactionmanager手動管理事務,實際應用中很少使用 第一種 使用transactiontemplate 進行程式設計式事務管理的示例 如下 autowired private transactiontempla...

spring的事務管理

spring宣告式事務讓我們從複雜的事務處理中得到解脫。使得我們再也無需要去處理獲得連線 關閉連線 事務提交和回滾等這些操作。再也無需要我們在與事務相關的方法中處理大量的try catch finally 我們在使用spring宣告式事務時,有乙個非常重要的概念就是事務屬性。事務屬性通常由事務的傳播...

Spring的事務管理

手動編碼的方式完成事務管理 需要事務管理器 真正管理事務物件.spring提供了事務管理的模板 工具類.第一步 註冊事務管理器 id transactionmanager class org.springframework.jdbc.datasource.datasourcetransactionm...