JDBC事务,数据库执行成功后,因为网络异常应用服务器并没收到成功,会出现这种不一致情况吗?

最近在学习微服务的相关知识,微服务的远程调用需要考虑异常的处理和相应的补偿机制。

进一步思考,其实应用服务器和数据库服务器也是分布式部署的微服务架构,应用服务器通过JDBC去远程调用DBMS。

这就会出现标题中描述的问题:当应用服务器通过远程调用DBMS后,DBMS执行成功,应用服务器因为网络异常,并没有收到成功的信息,所以应用服务器认为事务执行失败,这就出现了数据不一致的情况,比如应用服务器在转账失败后重试一次,这样就造成了转账了两次的BUG等等。

首先题主思考这种情况会出现吗?如果出现了应该怎么处理?
谢谢

首先,你可以将网络异常这种问题单独区分开转账失败来定义,如,定义一个网络异常,然后出现网络异常后,提示用户刷新网络,或者后台刷新就好。
其次,可以对数据一致性做校验,比如根据id来更新,装状态由1改成2,你可以在做更新之前先去查询一遍。

防止重复调用 首先数据库要添加唯一索引 其次保证关键方法是幂等的~具体来说就是调用的时候有一个业务id参数~
然后再执行这个方法的时候根据id去判断是否已经执行过了~如果执行过了返回执行成功~一般就不会有问题了