Transaction rolled back because it has been marked as rollback-only大概问题及解决方法

发布时间 2023-06-28 11:20:23作者: 刘小铭

Transaction rolled back because it has been marked as rollback-only

问题:前几天遇到一个问题,代码没有抛出我想要的带自定义提示消息的异常,却报了个这个,去搜了一下,大概原因如下:

因为我在controller的方法上写了@Transactional注解,里边调用的service的方法上也写了@Transactional注解,并且我在controller还写了try Catch捕获,在catch中使用e.printStackTrace()打印,没有我想要的具体提示信息,在控制台直接报了

Transaction rolled back because it has been marked as rollback-only

我搜了一下,具体错误原因我没看太懂,反正大概意思就是因为事务嵌套抛异常的问题,有想研究的可以搜一下具体的

解决方式:

  1. 把service中的@Transactional取消掉,直接使用最外层的事务,但是我是调用了两个service,并且这两个service别的地方还需要单独用,所以就没用这种方式。
  2. 直接在controller层的catch中用日志语句打印出来。之前方法在日志中不显示报错信息,排查比较难,这种方式能直接打印原本的报错信息,我要的就是这种效果!
    log.error(e.getMessage(),e);
  3. 据我所知,不止这两种方式,欢迎补充