购物车微服务编码

接下来,补充购物车微服务中的业务代码,主要把原单体 API 项目中的功能模块整合到购物车微服务中,源代码是在 newbee-mall-cloud-dev-step14 工程的基础上改造的,将工程命名为 newbee-mall-cloud-dev-step15

购物车微服务代码改造

打开购物车微服务 newbee-mall-cloud-shop-cart-web 的工程目录,在 ltd.shopcart.cloud.newbee 包下依次创建 config 包、dao 包、entity 包、service 包,在 resources 目录下新增 Mapper 文件夹用于存放 Mapper 文件。接着,将原单体 API 项目中与购物车模块相关的业务代码和 Mapper 文件(如图 7-2 所示)依次复制过来。

image 2025 04 28 12 21 09 657
Figure 1. 图7-2 原单体 API 项目中与购物车模块相关的业务代码和 Mapper 文件

上述步骤完成后,最终的目录结构如图 7-3 所示。

image 2025 04 28 12 21 35 001
Figure 2. 图7-3 目录结构

修改 newbee-mall-cloud-shop-cart-web 工程中的 application.properties 配置文件,主要进行数据库连接参数及 MyBatis 扫描配置,代码如下:

# datasource config (MySQL)
spring.datasource.name=newbee-mall-cloud-recommend-datasource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/newbee_mall_cloud_cart
_db?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&
autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15

spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.pool-name=hikariCP
spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1

# mybatis config
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

本步骤中的源代码涉及的数据库为 newbeemallcloudcartdb,数据库表为 tbnewbeemallshoppingcart_item。除此之外,还会用到商品数据和用户数据,这部分数据就要使用远程调用技术了。

在调整购物车微服务代码前,有些工具类已经被移到公用模块 newbee-mall-cloud-common 中,所以在 pom.xml 文件中需要引入公用模块。同时,代码中使用这些工具类的地方也需要修改一下引用路径。

另外,购物车微服务中也有一些公用类,都放到了公用模块 newbee-mall-cloud-common 中。

Controller 类中的接口地址都做了微调,与原单体项目中定义的 URL 不同。调整的原因主要是在网关配置时方便一些。

网关模块配置

打开商城端网关 newbee-mall-cloud-gateway-mall 项目中的 application.properties 文件,新增关于购物车微服务的路由信息,配置项为 spring.cloud.gateway.routes.*,新增代码如下:

spring.cloud.gateway.routes[4].id=shop-cart-service-route
spring.cloud.gateway.routes[4].uri=lb://newbee-mall-cloud-shop-cart-service
spring.cloud.gateway.routes[4].order=1
spring.cloud.gateway.routes[4].predicates[0]=Path=/shop-cart/**

这里主要配置 newbee-mall-cloud-gateway-mall 到购物车微服务的路由信息。如果访问网关项目的路径是以 /shop-cart 开头的,就路由到购物车微服务实例。