Springboot中事務的使用:java
一、啓動類開啓事務支持(其實默認是開啓的)。spring
二、在使用事務的public(只有public支持事務)方法(或者類-至關於該類的全部public方法都使用)加上@Transactional註解。框架
在實際使用中通常是在service中使用@Transactional,那麼對於controller->service流程中:ide
若是controller未開啓事務,service中開始了事務,service成功執行,controller在以後的運行中出現異常(錯誤),不會自動回滾。spa
也就是說,只有在開啓事務的方法中出現異常(默認只有非檢測性異常才生效-RuntimeException )(錯誤-Error)纔會自動回滾。code
若是想要對拋出的任何異常都進行自動回滾(而不是隻針對www.cungun.comRuntimeException),只須要在使用(rollbackFor = Exception.class)便可。遊戲
開啓事務的方法中事務回滾的狀況:事務
①未發現的異常,程序運行過程當中自動拋出RuntimeException或者其子類,遊戲程序終止,自動回滾。ci
②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();進行手動回滾。get
③注意:若是在try-catch語句中對可能出現的異常(RuntimeException)進行了處理,沒有再手動throw異常,spring認爲該方法成功執行,不會進行回滾,此時須要調用②中方法進行手動回滾 (java 框架項目案例:fhadmin.cn)
另外,若是try-catch語句在finally中進行了return操做,那麼catch中手動拋出的異常也會被覆蓋,一樣不會自動回滾。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//不會自動回滾
try
{
throw
new
RuntimeException();
}
catch
(RuntimeException e){
e.printStackTrace();
}
finally
{
}
//會自動回滾
try
{
throw
new
RuntimeException();
}
catch
(RuntimeException e){
e.printStackTrace();
throw
new
RuntimeException();
}
finally
{
}
|