问题描述
springboot项目在service层的业务逻辑用@Transactional(rollbackFor = Exception.class)注解来标明事务,结果程序报异常之后,数据依然修改成功了。。。
原因分析
因为在这块处理中,用try...catch...进行了异常的捕获,而没有抛出,故事务不会滚。
总结:在有事务的业务逻辑中,捕获异常要格外小心
解决方法
在本例中,因为涉及到一些异常的处理,所以,捕获照样捕获,然后再对异常抛出。结果就是异常抛出时,事务回滚,数据库数据不会修改成功。
当然,也可以不捕获,有异常就抛出。
参考文章