1. 程式人生 > >Spring事務只對執行時異常回滾

Spring事務只對執行時異常回滾

我們在使用Spring時候一般都知道事務在遇到異常的時候會回滾,豈不知Spring的事務預設只有在發生執行時異常即:RunTimeException時才會發生事務,如果一個方法丟擲Exception或者Checked異常Spring的事務並不會回滾。
下面我們來看看異常的分類,異常一般分為Checked異常和RunTime異常。
CheckedException:
Java認為Checked異常都是可以被處理的異常,所以Java程式必須顯式的處理Checked異常,如果程式沒有處理checked異常,程式在編譯時候將發生錯誤。
我們比較熟悉的Checked異常有
Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException
RunTimeException:
Runtime如除數是0和陣列下標越界等,其產生頻繁,處理麻煩,若顯示申明或者捕獲將會對程式的可讀性和執行效率影響很大。所以由系統自動檢測並將它們交給預設的異常處理程式。當然如果你有處理要求也可以顯示捕獲它們。
我們比較熟悉的RumtimeException類的子類有
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException
我們可以通過以下方式改變事務的預設處理方式:
在@Transaction註解中定義noRollbackFor和RollbackFor指定某種異常是否回滾。
@Transaction(noRollbackFor=RuntimeException.class)
@Transaction(RollbackFor=Exception.class)
這就要求我們在自定義異常的時候,讓自定義的異常繼承自RuntimeException,這樣丟擲的時候才會被Spring預設的事務處理準確處理。
---------------------
作者:孫_悟_空
來源:CSDN
原文:https://blog.csdn.net/fuyuwei2015/article/details/47812759
版權宣告:本文為博主原創文章,轉載請附上博文連結!