拋出自定義異常,spring AOP事務不回滾的解決方案

Spring AOP 默認對RuntimeException()異常或是其子類進行事務回滾,也就是說


事務回滾:throw new RuntimeException("xxxxxxxxxxxx"); 

事物回滾:throw new Exception("xxxxxxxxxxxx"); 


那麼,如何在拋出Exception或者自定義異常時,事務也進行回滾呢?有以下幾種方案:


1、在捕獲到異常或者顯示的拋出 RuntimeException

2、手動回滾----在捕獲到異常或者顯示的拋出自定義異常前,加一段代碼:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

3、在AOP的配置文件中,添加如下信息:

<tx:method name="add*" propagation="REQUIRED" rollback-for="com.xxx.xxx.xxxException"/>

      這樣,在拋出自定義異常時,就會進行事務的回滾了


小結:

方法1:在做測試時比較方便,放在業務中無法區分具體的錯誤信息

方法2:在個別業務處理或者調試代碼時使用放在代碼中不方便維護,每個異常都需要增加。

方法3:適合業務開發,也符合AOP的理念。將事務控制和業務分離

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章