美文网首页
关于java @Transactional(rollbackFo

关于java @Transactional(rollbackFo

作者: 天泽_ | 来源:发表于2018-10-25 15:10 被阅读0次

问题

    1:在使用@Transactional(rollbackFor = Exception.class)时,将注解加入到了方法上面,

      1.1:A方法调用了一个insert方法(插入订单),插入数据库,并且马上调用一个远程RPC接口(将订单编号传过去),RPC接口业务处理后,再回调回来

      1.2:A方法回调监听,如果RPC业务回调回来,将回调回来的信息(订单id)进行业务处理,进行select进行数据查询

      1.3:SQL查询异常,找不到订单信息

    原因:@Transactional(rollbackFor = Exception.class)注解在执行A方法时,A方法业务还未完全执行完成。SQL是不会commit到数据库中,所以在A方法中调用远程回调的时候,如果远程回调业务处理的很快,在A方法还未执行完成的时候,回调给A方法的回调监听,回调监听这时候去数据库查找数据的时候,就会找不到数据。

     解决办法:将@Transactional(rollbackFor = Exception.class)注解放到有写入SQL的地方进行注解

   

相关文章

网友评论

      本文标题:关于java @Transactional(rollbackFo

      本文链接:https://www.haomeiwen.com/subject/vhxctqtx.html