在service層使用聲明式事務添加@Transactional(rollbackFor = Exception.class)註解spring
多個方法進行數據庫操做,執行失敗則隱式的回滾事務,可是已經成功的發方法不會回滾,數據庫
想要,全部方法都回滾,須要手動try-catch,進行手動回滾(spring aop 異常捕獲原理:被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認狀況下aop只捕獲runtimeexception的異常)spa
try { a.save(); b.save(); } catch (Exception e) { //方式一:aop捕獲RuntimeException異常回滾 throw new RuntimeException(); //方式二: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); }