這一系列文章並不完整,這是我分析公司內部分佈式事務框架的一部分。我們的分佈式是基於二階段提交原理實現的,由於內部資料無法公開請大家諒解。下面將事務以及spring事務相關的一部分供大家參考!
1.一般jdbc事務要經歷如下步驟
1)獲取數據連接Connection con = datasource.getConnection();
2)設置非自動提交con.setAutoCommit(false);
3)執行數據庫crud操作
4)提交或者回滾事務con.commit()/con.rollback()
如上步驟其實除了第3步跟業務邏輯有關,其它都是固定步驟與業務邏輯無關的,編程式事務控制到處充斥這些代碼。
聲明式事務是爲了大家專注於業務,把事務固定步驟抽離出來,利用註解或者xml配置通過aop方式在方法調用前開啓事務,在方法調用結束後commit或者rollback事務
對於聲明式事務需要解決如下場景
1)業務A由methodA完成 作爲一個原子操作,在一個事物內完成
2)業務B由methodB完成 作爲一個原子操作,在一個事物內完成
3)業務C methodC 由methodA, methodB以及其他業務邏輯代碼組成也需要在事務中完成邏輯
這裏是把methodA, methodB的邏輯都搬到methodC中呢, 這樣重複邏輯太多
還是在methodC方法中直接調用methodA,methodB
這裏就需要解決事務的嵌套問題。