springBoot事務回滾的使用總結

2021-09-12 22:24:40 字數 1374 閱讀 5732

事務回滾在企業級開發中實用較為頻繁,近段時間使用到了,總結一下:

首先在springboot中是整合了事務的回滾操作了,也就是@transactional註解。事務的回滾有兩種方式,一種是自動回滾,另一種是手動回滾,下面對兩種使用稍作總結。

1:自動回滾

首先回滾的方法必須是public的,其次在需要回滾的方法上新增@transactional 這兩者為前提條件。自動回滾當然是在發生異常才會回滾,大部分都會強調只能捕獲runtimeexception,也就是非檢查型異常。這個是沒問題的,但是如果不是runtimeexception,你就必須進行處理,也就是捕獲,否則程式根本無法正常,不報錯。什麼意思呢,意思就是沒有處理的異常丟擲了,才會進行自動回滾。如下:

失敗案列1:

@override

@transactional

public boolean add()

//第二次插入,學生表

if (true)

return true;

} catch (exception e) finally

}

這裡是失敗的,當丟擲異常之後,異常被catch住了,當然不是沒有丟擲非檢查異常的原因,而是**獲的異常被處理了,處理後程式預設為處理完成了,就不是異常了,那麼正常入庫,所以沒有回滾。

成功案列:

@override

@transactional

public boolean add()

//第二次插入,學生表

if (true)

return true;

} catch (exception e) finally

}

在捕獲異常的基礎上,又丟擲了異常,而這次是非檢查型異常,就會被回滾了,預設執行到這裡,該方法程式出現錯誤,那麼取消本次入庫。這裡當然你也可以試試在catch中丟擲檢查型異常試試,你就會明白我說的,報錯是什麼意思了。

2:手動回滾:

新增transactionaspectsupport.currenttransactionstatus().setrollbackonly(); 語句,這個便是手動回滾語句。

@override

@transactional

public boolean add()

//第二次插入,學生表

if (true)

return true;

} catch (exception e) finally

}

這 遍是手動回滾的例子,其實也不一定非要在catch中新增手動回滾的語句,你同樣可以在任何乙個地方進行判斷然後使用手動回滾語句,會繼續之後語句後的所有方法,但是不建議這麼使用。

springboot事務手動回滾

專案中的事務,我們一般都是使用註解式事務,在service層加上 transactional,或者加在具體方法上。但有的時候我們需要手動回滾事務,如以下兩種情況 1 try.catch到異常之後需要回滾事務。如阿里巴巴開發手冊中就提到 強制 有 try 塊放到了事務 中,catch 異常後,如果需要...

SpringBoot 事務回滾失敗

要麼全部成功,要麼全部失敗,不允許部分成功部分失敗。serviceimpl類內部方法的呼叫。addstudent 方法能夠執行,updatestudent 方法因為有錯誤會丟擲異常,但是事務回滾失敗。直接呼叫方法,實際上是通過this呼叫,也就是直接呼叫了方法,而不是通過spring上下文獲得 類,...

SpringBoot手動新增事務回滾

org.springframework.boot spring boot starter jdbc 新增依賴成功後,事務就預設開啟了,只需要在需要的方法和類上新增註解 transactional上就可以 注意 當新增在類上,說明此類的public的方法都行事務管理 transactionaspect...