springboot事务手动回滚报错问题及解决
作者:bekote
文章描述了在使用Spring框架时遇到的异常回滚问题,由于外部事务未正确响应内部手动标记的回滚操作导致,分析发现是JDK动态代理引起的,并尝试通过配置更改代理方式解决未果,最终通过更换Shiro整合包解决了问题
springboot事务手动回滚报错
捕捉异常之后手动标记回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
没有嵌套事务,还是报
Transaction rolled back because it has been marked as rollback-only异常错误

查看错误堆栈
service调用的方法外层还套有一层事务,方法内部手动标记回滚,没有抛出异常,外部方法还是会提交事务导致报错
![]()
JDK动态代理导致的
但是Spring2.x默认使用cglib动态代理,更改配置spring.aop.proxy-target-class=true也不起作用
最后对比过往项目发现整合shiro时引入包
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
</dependency>改用shiro-spring包可以解决
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
</dependency>总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
