资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

关于事务的一点思考-创新互联

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

沽源网站建设公司成都创新互联,沽源网站设计制作,有大型网站制作公司丰富经验。已为沽源千余家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的沽源做网站的公司定做!

在使用事务的时候,代码里会爆出上面的错误

什么原因呢?
方法A调用了方法B。
且方法A和方法B上都启动了事务。(都标注了@Transactional)
方法B抛出了异常。
方法A收到B的异常后直接吃掉了,没有继续抛出。

问题就出现在异常上
在上面的默认情况下,Spring 是让方法AB 公用一个事务。
但是Spring 已经感知到了方法B的异常,然后在方法A里面,代码逻辑吃掉了异常,当A结束的时候,Spring并没有感知到A的异常,就准备提交事务。这就冲突了。
从A上说方法一切正常,可以提交!
从B上说已经抛出了异常,得回滚!

知道了原因,解决这个异常那就简单了

  • 如果希望整个流程都能正常提交:那就在b里面把异常吃掉,不要让Spring感知到异常。
  • 如果希望整个流程直接回滚:那就不要在A里吃掉异常,让Spring感知到异常。

那还有一个问题,如果就按照最原始的写法,抛出了Transaction rolled back because it has been marked as rollback-only这个异常,那整个事务到底是什么情况呢?是回滚了,还是正常提交了?

答案是回滚了!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:关于事务的一点思考-创新互联
文章链接:http://cdkjz.cn/article/dsiooo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220