java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot事务手动回滚报错

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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文