快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

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

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://6mz.cn/article/dsiooo.html

其他资讯