try catch 与 事物回滚@Transactional

问题:正如他所说(都加上了@transaction)

1.如果try中的代码出错了,却无法回滚

try  {
   .......
   cccservice.save();
    aaaService.save();
  
} catch (RuntimeException e) {
 logger.info();
  
}

这时候,事物不会回滚,因为它需要throw异常,才能继续回滚。

2.想回滚cccservice.save();  aaaService.save(); 但是bbbService.save(e.getMessage());不想回滚

try  {
   .......
   cccservice.save();
    aaaService.save();
  
} catch (RuntimeException e) {
 
     bbbService.save(e.getMessage());
     throw  new  RuntimeException(e.getMessage());
}

这个时候throw错误,事物回滚,所有的db操作都被回滚,我们想出的办法是,将try的内容提出来在带事物的里面,出错回滚,而bbbService.save(e.getMessage());在不带事物的里面,不可以回滚,这样就能执行它了


猜你喜欢

转载自blog.csdn.net/qq_38623459/article/details/80318503