共计 969 个字符,预计需要花费 3 分钟才能阅读完成。
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{
}