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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM