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的理念。將事務控制和業務分離