关于事务的问题

关于事务的问题

https://img1.sycdn.imooc.com//climg/63a3f7a009636f1509840426.jpg

问题描述:老师请问下这是为什么,是什么导致的。

我的后续解决办法是:

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @Override
                public void afterCommit() {
                    //需要提交之后执行的代码
                }
            });

但是并没有理解原理

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
CC老师 2022-12-23 09:08:36

你这个场景用的技术是什么?是如何远程调用的? 从你的描述来看,貌似还是有事务的传播;如果确定完全没有分布式事务的话,那就当作是 两个 不同的事务,操作同一个数据库,这个时候后续查不到的情况,大概有这么几种:1: 前面业务操作锁了表,导致后面事务排队,无法插入新数据   2:事务执行的时间差,就是后面插入的事务还没完成,但是你前面的这个线程,已经执行到查询这个数据了  3: 还有一种可能就是,你数据库采用的 主从 ,你插入数据在在master,但是查询数据在slave,master和slave之间同步数据有一个时间差,你查询的时候,还没有同步过来。    当然具体是啥情况,还得结合你具体实现来分析,这里只是提几点思考的方向和可能性。

  • 提问者 makeMoney #1

    在事务中请求一个接口,执行新增表操作。在回到这个事务中(此时通过id已经能查到这条数据了)却查询不到。执行了这个代码在afterCommit里面 查询的到数据

    TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                    @Override
                    public void afterCommit() {
                        //需要提交之后执行的代码
                    }
                });


    2022-12-23 09:18:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java 亿级项目架构设计与落地应用
  • 参与学习       110    人

全网稀缺 一次性掌握超大型项目架构设计与落地能力 快速铲平架构理论门槛 迅速拨高架构实际应用能力 帮助3年以上Java工程师突破能力瓶颈,技术发展空间更上一层楼

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师