多個資料庫操作 同步回滾問題

2021-09-26 15:34:14 字數 1033 閱讀 2783

乙個方法中有n個service方法進行資料庫操作,如果某個發生異常,那麼之前成功的資料庫操作,也要回滾。

在該方法上新增註解@transactional註解即可,出現異常能夠自動回滾。但是如果**中進行了tay catch去捕獲異常,那麼要在catch中去手動

回滾。新增**:

transactionaspectsupport.currenttransactionstatus().setrollbackonly();

demo: 使用的mybatis-plus 

@transactional

try else

} catch (exception e)

return returnresult;

}

/*

* 查詢 每日 新增資料

*/public void obtainhcdata() else}/*

* 將查詢後的資料儲存入本地庫qlt_qlsx表

*/@transactional

public void cunqlsxdatadto(listqlsxdatalist)catch(exception e) }}

obtainhcdata方法取資料,呼叫 cunqlsxdatadto方法,把資料寫入庫裡面。但是單元測試發現,
transactionaspectsupport.currenttransactionstatus().setrollbackonly();這一行丟擲異常。
經查詢發原因在於:

所以我決定把上面兩個**中的   obtainhcdata 和 cunqlsxdatadto 方法進行合併,不再拆分。參考文章寫的很不錯,而且涉及到多個資料庫操作,只回滾事務的,別的正常執行的情況:

資料庫回滾問題

今天遇到的小問題 override public result importexcel multipartfile file throws illegalacces ception,instantiationexception,ioexception,invalidformatexception e...

資料庫回滾

oracle恢復刪除表或表記錄 一 表的恢復 對誤刪的表,只要沒有使用purge永久刪除選項,那麼從flash back區恢復回來希望是挺大的。一般步驟有 1 從flash back裡查詢被刪除的表 select from recyclebin 2.執行表的恢復 flashback table tb...

資料庫回滾與DDL DML

因為ddl沒有事務性,所以ddl不能回滾。要實現自動回滾。begin,commit,rollback 則sql語句中只能包括dml。這樣,自動化發布就會受限規範格式。故而,一刀切的辦法是,假定所有sql不支援事務,自已定義好rollback的sql指令碼,在出錯時能用 回滾,而不是依賴於資料庫本身的...