例:一個方法報異常,另外一個方法不會回滾web
例:一個方法報異常,另外一個方法回滾spring
在catch語句中最後增長throw new RuntimeException()語句,以便讓aop捕獲異常再去回滾,而且在service上層(webservice客戶端,view層action)要繼續捕獲這個異常並處理
api
【如今的作法】在service層方法的catch語句中增長:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常了
app
其實像第一種try catch這種把整個包裹起來,這種業務方法也就等於脫離了spring事務的管理,由於沒有任何異常會從業務方法中拋出,全被捕獲並「吞掉」,致使spring異常拋出觸發事務回滾策略失效。
編碼
若是在catch代碼塊中採用頁面硬編碼的方式使用spring api對事務作顯式的回滾,這樣寫也是能夠的。spa