spring事务报 Transaction rolled back because it has been marked as rollback-only异常的大概原因及解决方法
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
我搜了一下,具体错误原因我没看太懂,反正大概意思就是因为事务嵌套抛异常的问题,有想研究的可以搜一下具体的
解决方式:
- 把service中的@Transactional取消掉,直接使用最外层的事务,但是我是调用了两个service,并且这两个service别的地方还需要单独用,所以就没用这种方式。
- 直接在controller层的catch中用日志语句打印出来。之前方法在日志中不显示报错信息,排查比较难,这种方式能直接打印原本的报错信息,我要的就是这种效果!
1
log.error(e.getMessage(),e);
- 据我所知,不止这两种方式,欢迎补充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!