项目中遇到关于异常的问题

222 阅读1分钟

最近上线的项目中遇到了一个关于事务的问题,由于我们的serviceImpl类上加了@Transactional(rollbackFor = Exception.class)注解,这个注解会让checked的例外也回滚。什么意思呢,就是通常我们在获取异常的时候无非是直接抛出去让上层业务捕获异常自行处理,意外一种就是在抛出异常的地方就进行try catch异常捕获。如果在方法或者类上加上@Transactional(rollbackFor = Exception.class)这个注解我们try catch捕获的异常想单独处理自己觉得业务逻辑也是不行的。当然这个并不是我今天想说的,只是正好碰到顺便百度了一下,

上图是项目中遇到的问题,在标注的地方可能会因为扣钱失败或者余额不足抛出异常来,这个时候我不想因为这个异常导致下面的请求渠道的代码走不下去,只是希望通过try catch捕获到该异常然后做订单失败的处理,由于上面说了类上加了@Transactional(rollbackFor = Exception.class)这个注解导致这里用try catch也没用,报错信息: Transaction rolled back because it has been marked as rollback-only 最后的解决办法是(相信细心的你也发现了)在单独的这个方法上加上 @Transactional(propagation = Propagation.NESTED)这个注解

先贴一个关于事务传播属性的图

最后的一个属性就是解决这次问题的关键

下面补充一些相关问题:

相关链接:blog.csdn.net/z69183787/a…