spring事務詳解(二)簡單樣例

2021-08-28 12:47:21 字數 1683 閱讀 4785

spring事務詳解(一)初探事務

spring事務詳解(二)簡單樣例

spring事務詳解(三)原始碼詳解

spring事務詳解(四)測試驗證

spring事務詳解(五)總結提高

在spring中,事務有兩種實現方式:

程式設計式事務管理:程式設計式事務管理使用底層原始碼可實現更細粒度的事務控制。spring推薦使用transactiontemplate,典型的模板模式。

申明式事務管理:新增@transactional註解,並定義傳播機制+回滾策略。基於spring aop實現,本質是對方法前後進行攔截,然後在目標方法開始之前建立或者加入乙個事務,在執行完目標方法之後根據執**況提交或者回滾事務。

建立使用者時,新建乙個使用者餘額表。如果使用者餘額建立失敗丟擲異常,那麼使用者表也回滾,即要保證「新增使用者+新增使用者餘額」一起成功 或 回滾。

如下圖,只需要在service.impl層,業務方法上新增@transactional註解,定義事務的傳播機制為required(不寫這個引數,預設就是required),遇到exception異常就一起回滾。

required傳播機制下:存在加入事務,不存在建立新事務。保證了當前方法中的所有資料庫操作都在乙個物理事務中,當遇到異常時會整個業務方法一起回滾。

1

/**2

* 建立使用者並建立賬戶餘額3*

4* @param

name5*

@param

balance6*

@return7*/

8 @transactional(propagation= propagation.required, rollbackfor = exception.class)9

@override

10public

void

adduserbalanceanduser(string name, bigdecimal balance)

程式設計式事務管理,我們使用spring推薦的transactiontemplate。我這裡因為使用的是spring cloud的註解配置,實現用了自動配置類配置好了transactiontemplate這個型別的bean.使用的時候直接注入bean使用即可(當然老式的xml配置也是一樣的)。如下:

1

/**2

* 建立使用者並建立賬戶餘額(手動事務,不帶結果)3*

4* @param

name5*

@param

balance6*

@return7*/

8@override

9public

void

adduserbalanceanduserwithintt(string name, bigdecimal balance) catch

(exception e) ",e);30}

3132}33

});34 }

注意:1.可以不用try catch,transactiontemplate.execute自己會捕捉異常並回滾。--》推薦

2.如果有業務異常需要特殊處理,記得:status.setrollbackonly(); 標識為回滾。--》特殊情況才使用

spring支援的這兩種方式都可以,個人認為大部分情況下@transactional可以滿足需要。

Spring事務詳解

事務傳播行為型別 說明propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 使用...

Spring事務詳解

什麼叫事務?關於事務,最簡單最常見的例子就是取錢。atm機取錢有兩個步驟,第一步輸入金額密碼,銀行卡扣掉1000元,第二步atm出鈔1000元,這兩個步驟必須要麼都執行成功,要麼都不執行。如果其中乙個步驟失敗了,必須把整個過程回滾,取消掉所有操作,這就是事務最基本的應用,事務就是用來解決類似問題的。...

spring事務詳解

1.spring事務原理 spring事務的本質其實就是資料庫對事務的支援,沒有資料庫對事務的支援就無法提供事務的功能。2.spring事務傳播屬性 propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇,也是 spring 預設的事務的傳播。pr...