JPA踩坑问题
最近项目中使用了JPA,在使用JPA的时候,由于疏忽,出现了一个问题,还是因为对JPA不熟悉导致的,问题是这样的:
先总结说一下问题的原因:
在A方法中,对数据库的订单表(order)的date字段进行更新,但是在事务还没有提交的时候,收到了mq消息,会更新order表的状态字段status,但是由于A方法还没有提交事务,所以,mq更新状态字段的方法会覆盖A方法中的date更新信息,将date覆盖为A方法更新之前的值
这里我解释下时序图的意思:
- A系统是我这里负责的系统,B系统是我的下游,在客户预约时间之后,我首先会把客户的预约时间存到数据库的订单表里面,这是时序图中第一步做的事情
- 第二步:会把这个时间同步给下游,这里就是一个简单的dubbo接口的调用
- 第三步,我这里会接着处理其他的一些逻辑,但是有一个问题:1、2、3这三步,是在同一个事务里面,这样的话,只有在1、2、3全部完成的时候,才会提交事务,把时间更新到数据库的订单表里面
- 但是在第2步,调用了下游接口之后,下游会发一个mq消息回来,通知我的A系统,进行一个状态的变更,也就是updateStatus方法,这里的状态并不是我自己订单的状态,而