一,问题
在使用springcloud搭建分布式服务之后,使用consumer调用provider来插入一条订单记录到数据库之后,想要同时获得该新增订单的主键值,便于接下来业务操作。刚开始想的很简单,直接用mybatis中useGeneratedKeys="true" keyProperty="id"这两个属性就能完美实现。数据库显示插入数据成功,可是在consumer端死活获取不到自增的id值,调试了很久一直是null。
二,原因
后来才反应过来,传过来的订单类对象是传到了provider服务器上,也成功入参添加了数据,mybatis在该服务器上也返回了自增的主键给订单类。然而这个填充了主键的订单类对象一直是保留在了provider上面,并没有通过feign组件传到consumer客服端。分布式的话就是两个独立的系统,对象都是存在各自的运行环境中,是完全隔离的,这就成了互不相关的两个对象。所以consumer端一直拿不到主键id值。🙈🙈🙈
三,解决方案
方案一: 可以在provider端的service层重新封装返回值为Map,里面存入订单类和数据库影响条数。
方案二:在consumer端利用生成的订单编号去数据库查新增的数据来获取新增的主键值
微服务中使用mybatis的insert操作时useGeneratedKeys=“true“ keyProperty=“id“返回自增主键遇到了坑
最新推荐文章于 2024-09-29 15:42:53 发布