1. 程式人生 > >在service層try/catch後如何保證 事務

在service層try/catch後如何保證 事務

首先了解一下異常的組成:

1、RuntimeException()  例如:陣列越界異常、空指標異常、(我們在編寫之後不會提示讓 try catch的異常、程式碼編寫錯誤導致,可避免)

2、非RuntimeException() 例如: IO異常、(會提示try catch的異常,不是程式碼編寫錯誤導致的,只能丟擲)

3、unchecked異常:RuntimeException + Error

4、checked異常:非RuntimeException()

詳細文章:http://blog.csdn.net/qq_14982047/article/details/50989761

spring通過異常進行事務回滾的機制:

1、spring 的預設事務機制,當出現unchecked異常時候回滾,checked異常的時候不會回滾;

2、我們有時為了列印日誌,會在service層抓住Exception並列印日誌,這時我們的所有異常都會被認為成checked異常。

3、為了事務的正常生效:當有try catch後捕獲了異常,事務不會回滾,如果不得不在service層寫try catch 需要catch後 throw new RuntimeException 讓事務回滾;

例子:

try {
} catch (Exception e) {
e.printStackTrace();
logger.error(“發生異常”);
throw new RuntimeException();
}
如何保證在有返回值的方法中進行異常的捕獲?

方法1:

因為要保證當前方法具有返回值,在前端介面展示操作狀態。所以我們service層在添加了try catch日誌列印後,丟擲的runtime類異常需要在controller層進行捕獲,捕獲之後,在catch中編寫操作失敗後返回值的資訊。

方法2:

不依賴於spring的異常捕獲機制進行事務回滾,通過手動的session.rollback進行異常捕獲後回滾事務也可。


作者:開著小馬奔騰喲
來源:CSDN
原文:https://blog.csdn.net/lpp_dd/article/details/79020046
版權宣告:本文為博主原創文章,轉載請附上博文連結!