Springboot中事务的应用:
1、启动类开启事务反对(其实默认是开启的)。
2、在应用事务的public(只有public反对事务)办法(或者类-相当于该类的所有public办法都应用)加上@Transactional注解。
在理论应用中个别是在service中应用@Transactional,那么对于controller->service流程中:
如果controller未开启事务,service中开始了事务,service胜利执行,controller在之后的运行中出现异常(谬误),不会主动回滚。
也就是说,只有在开启事务的办法中出现异常(默认只有非检测性异样才失效-RuntimeException )(谬误-Error)才会主动回滚。
如果想要对抛出的任何异样都进行主动回滚(而不是只针对www.cungun.comRuntimeException),只须要在应用(rollbackFor = Exception.class)即可。
开启事务的办法中事务回滚的状况:
①未发现的异样,程序运行过程中主动抛出RuntimeException或者其子类,游戏程序终止,主动回滚。
②应用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚。
③留神:如果在try-catch语句中对可能呈现的异样(RuntimeException)进行了解决,没有再手动throw异样,spring认为该办法胜利执行,不会进行回滚,此时须要调用②中办法进行手动回滚 (java 框架我的项目案例: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{
}