巢狀事務分析 Transactional

2021-10-08 21:32:19 字數 736 閱讀 3480

事務型別總共有七種;在這就介紹常用的的兩個。

@transactional(propagation=propagation.required)//如果有事務,那麼加入事務,沒有的話新建立乙個;不指定propagation預設就是這個

@transactional(propagation=propagation.requireds_new)//不管是否存在事務,都建立乙個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務,

propagation.required型別事務巢狀

a事務方法呼叫b事務方法時如果兩個事務註解在生效的情況下,在這裡a事務稱為父類,b事務稱為子類;a方法運算元據庫後呼叫b方法,下列異常丟擲時保證ab方法裡對資料庫操作都完成了才丟擲異常;ruleexception繼承的runtimeexception;

列舉一下測試結果:

總結:1.如果子類方法丟擲的異常,不管滿足子類還是父類的註解的回滾事務就會回滾;

2.如果父類丟擲異常,只看父類的事務註解,如果回滾就父子皆回滾,如果不回滾父子皆不回滾

巢狀事務型別是propagation.requires_new

這種情況下子事務開啟了新的session,父事務先鎖定一條記錄(for update)子事務也鎖這一條記錄時就會死鎖;這點要注意;

MySQL儲存過程 事務transaction

mysql 中,單個 store procedure sp 不是原子操作,而 oracle 則是原子的。如下的儲存過程,即使語句2 失敗,語句 1 仍然會被 commit 到資料庫中 sql view plain copy create table testproc id int 4 primary...

Revit二次開發事務Transaction相關

transaction是用來處理revit中的有關改變模型的事務。此處提到的模型,基本上指的是一切element,注意,像line等不屬於element.看下面的例子 sketchplane sketchplane null string txt origin line line null usin...

事務巢狀的問題

使用 transactionscope 的過程中,如果存在巢狀事務,比如,bll 層使用了事務,而所呼叫的 dal 內方法也使用了事務的話。假設我們吃掉了 dal 的異常,那麼,外部事務會不會成功?測試 如下 using var ts new transactionscope catch ts.co...