標簽:出現 而不是 throw 程序 使用 項目案例 cti 支持 public
Springboot中事務的使用:
1、啓動類加上@EnableTransactionManagement注解,開啓事務支持(其實默認是開啓的)。
2、在使用事務的public(只有public支持事務)方法(或者類-相當于該類的所有public方法都使用)加上@Transactional注解。
在實際使用中一般是在service中使用@Transactional,那麽對于controller->service流程中:
如果controller未开启事务,service中开始了事务,service成功执行,controller在之后的运行中出現异常(错误),不会自动回滚。
也就是说,只有在开启事务的方法中出現异常(默认只有非检测性异常才生效-RuntimeException )(错误-Error)才会自动回滚。
如果想要对抛出的任何异常都进行自动回滚(而不是只针对RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。
開啓事務的方法中事務回滾的情況:
①未發現的異常,程序運行過程中自動抛出RuntimeException或者其子類,程序終止,自動回滾。
②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();進行手動回滾。
③注意:如果在try-catch语句中对可能出現的异常(RuntimeException)进行了处理,没有再手动throw异常,spring认为该方法成功执行,不会进行回滚,此时需要调用②中方法进行手动回滚 (java 框架項目案例:www.fhadmin.cn)
另外,如果try-catch語句在finally中進行了return操作,那麽catch中手動抛出的異常也會被覆蓋,同樣不會自動回滾。
//不会自动回滚 try{ throw new RuntimeException(); }catch(RuntimeException e){ e.printStackTrace(); }finally{ } //会自动回滚 try{ throw new RuntimeException(); }catch(RuntimeException e){ e.printStackTrace(); throw new RuntimeException(); }finally{ }
標簽:出現 而不是 throw 程序 使用 項目案例 cti 支持 public
原文地址:https://www.cnblogs.com/teacher11/p/14966339.html