TeaFramework 事務的實現

2021-08-20 11:55:18 字數 1649 閱讀 3316

事務的本質:讓程式像我們看到的那樣執行。

資料庫事務就是對於界定為同乙個事務的一組資料庫操作,要麼同時成功,要麼同時失敗,不可能出現部分成功的中間狀態。

對於jdbc原生事務,首先要設定自動提交為false:connection.setautocommit(false),如果整個執行過程沒有異常則提交事務commit,否則就回滾rollback。對於原生態的jdbc事務,編碼顯得非常繁瑣,並且對於整個系統的共性業務,特別適合用aop的方式來實現。

下面說到重點了,teaframework事務實現。

1、事務的使用應該盡量簡單,在方法或者class上加乙個註解便可搞定,對於class有事務註解,那麼該class所有方法都有進行事務控制。

@target()

@retention(retentionpolicy.runtime)

public @inte***ce transcation

2、事務的傳播

事務的傳播描述的是多個事務巢狀的問題,對於大部分場景而言,頂層方法有事務,則子事務被納入當前事務,這種場景佔80%,那麼teaframework只實現這種事務傳播。

請看具體的**

public class transcationproxy extends abstractproxy  catch (throwable e)  finally 

} else

} @override

public void before(proxy proxy)

} catch (exception e)

} @override

public void after(proxy proxy) catch (exception e)

} @override

public void exception(proxy proxy) catch (exception e)

} @override

public void end(proxy proxy) catch (exception e) finally

}}

這裡本質上是實現了乙個**類,用aop的思路來實現

1、before:在事務開啟之前,獲取資料庫連線,並設定自動提交為false

2、after:執行過程如果沒有任何異常,則提交事務

3、exception:執行過程發生異常,則回滾事務

4、end:執行結束,關閉資料庫連線,歸還給連線池

那麼事務的傳播在**實現的呢?僅僅只有一行**transcationthreadvariable.set(true),這行**標示了當前執行緒中事務的狀態,如果事務已經由上層方法開啟,則下面所有的資料庫操作與開啟事務的方法共用乙個資料庫連線connection,那麼就被納入了乙個事務。

來看乙個例子,在insert方法上加上@transcation註解

@teadao("testdao")

public inte***ce testdao

執行結果:

這就是teaframework事務的實現過程。

部落格:

MySQL事務的介紹 事務的特性 事務的開啟

事務介紹 簡單的說,事務就是指邏輯上的一組sql語句操作,組成這組操作的各個sql語句,要麼全成功要麼全失敗。例如 a給b轉賬5元,流程是從a的賬戶扣除5元,把5元打入b的賬戶,b的賬戶上收到5元。sql語句為 update account set money money 5 where name ...

事務的特徵以及Hibernate事務

事務應該具有4個屬性 原子性 一致性 隔離性 永續性。這四個屬性通常稱為acid特性。hibernate封裝了jdbc和jta事務,應用程式可以繞過hibernate api,直接通過jdbc和jta的api來宣告事務。其中,jta可以用來處理分布式事務。應用程式通過hibernate api宣告事...

事務 事務併發

最近工作非常鬱悶,天天被領導盯著。主要是系統近來死鎖發生在頻率很高。最終,經過大家的共同努力,我們成功的定位並解決了問題,所以把過程中學習的知識與經驗分享一下 問題背景 系統中有乙個賬戶模組,負責管理和維護會員的各種資金及明細,對外的功能涉及資金的增加與扣減等。通過監控系統發現,當外圍系統併發訪問和...