Spring的事務管理簡介

2021-08-28 23:28:04 字數 1688 閱讀 4224

比如去atm機取1000塊錢,大體有兩個步驟:首先輸入密碼金額,銀行卡扣掉1000元錢;然後atm出1000元錢。這兩個步驟必須是要麼都執行要麼都不執行。如果銀行卡扣除了1000塊但是atm出錢失敗的話,將會損失1000元;如果銀行卡扣錢失敗但是atm卻出了1000塊,那麼銀行將損失1000元。所以,如果乙個步驟成功另乙個步驟失敗對雙方都不是好事,如果不管哪乙個步驟失敗了以後,整個取錢過程都能回滾,也就是完全取消所有操作的話,這對雙方都是極好的。 

事務就是用來解決類似問題的。事務是一系列的動作,它們綜合在一起才是乙個完整的工作單元,這些動作必須全部完成,如果有乙個失敗的話,那麼事務就會回滾到最開始的狀態,彷彿什麼都沒發生過一樣。 

在企業級應用程式開發中,事務管理必不可少的技術,用來確保資料的完整性和一致性。 

事務有四個特性:acid

spring並不直接管理事務,而是提供了多種事務管理器,他們將事務管理的職責委託給hibernate或者jta等持久化機制所提供的相關平台框架的事務來實現。 

spring事務管理器的介面是org.springframework.transaction.platformtransactionmanager,通過這個介面,spring為各個平台如jdbc、hibernate等都提供了對應的事務管理器,但是具體的實現就是各個平台自己的事情了

1.datasourcetransactionmanager :底層使用jdbc管理事務

2.hibernatetransactionmanager :底層使用hibernate管理事務

propagation_required        支援當前事務,如果當前沒有事務,則新建乙個事務。

propagation_supports       支援當前事務,如果當前沒有事務,則以非事務方式執行。

propagation_mandatory         支援當前事務,如果當前沒有事務,則丟擲異常。

propagation_requires_new     新建事務,如果當前存在事務,把當前事務掛起。

propagation_not_supported     以非事務方式執行,如果當前存在事務,把當前事務掛起。

propagation_never         以非事務方式執行,如果當前存在事務,則丟擲異常。

propagation_nested            如果當前存在事務,則在巢狀事務內執行,如果當前沒有事務,則新建乙個事務

isolation_default         預設隔離級別,使用資料庫預設的事務隔離級別。

isolation_read_uncommitted    最低的隔離級別,允許乙個事務檢視另乙個事務未提交的資料。會產生髒讀,不可重複讀,幻讀。

isolation_read_committed    保證乙個事務修改的資料需要提交後才能被另乙個事務讀取,鎖定正在讀取的行。能夠避免髒讀。

isolation_repeatable_read     鎖定讀取的所有行。能夠避免髒都,不可重複讀。

isolation_serializable       最高的隔離級別,鎖住表,事務被處理為順序執行。能夠避免髒讀,不可重複讀,幻讀。

讀問題

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

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

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

Spring 事務管理簡介

事務管理器是 platformtransactionmanager 介面物件。其主要用於完成事務的提交 回滾,及獲取事務的狀態資訊。void commit transactionstatus status 事務的提交 transactionstatus gettransaction transact...

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...