事務回滾在企業級開發中實用較為頻繁,近段時間使用到了,總結一下:
首先在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...