乙個方法中有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指令碼,在出錯時能用 回滾,而不是依賴於資料庫本身的...