情景:这个问题时出现在实际的生成环境里面的,因为我这边做的是异步通知,每次在主流程快要走完的时候,最后再去通知一下客户的回调接口,表示我这边已经生成有效订单,然后主流程里面加了事务,之前跑了几天没有任何问题,而且通知也很正常,并且在异步方法里面也保存了每一次的通知记录,但是在今晚的测试过程中,突然发现有一条通知没有保存到数据库中,然后刚开始也不知道是什么原因,但是这个方法是实际执行的,只是没有将通知的数据保存到数据库中,然后在保存数据前的每一步都打印一下相关日志,看看是什么原因造成的,发布到测试环境,查看日志打印,定位到问题是因为事务中保存的数据,然后在异步方法里面去查询该数据没有查询到;
初步判断:是因为事务存在隔离性,主流程里面的事务还没有提交,然后异步这边去查询导致没有查询的实际的数据,经过判断为null,所以没有将通知相关数据插入表中。
解决方案:细分一下数据,将需要的数据直接传入异步方法中,不必再去查询一边数据库,减少数据库查询也就没有这个问题的出现了。
网友评论