Spring Cloud构建电商平台——商品模块的设计与实现
本文将介绍如何使用Spring Cloud构建电商平台的商品模块,包括provider和consumer的搭建以及商品查询功能。
商品模块实现
创建goods-provider服务
首先,在父项目web-shop中创建一个名为goods-provider的子模块。通过Spring Initializr生成Spring Boot项目,并添加以下依赖:Web, Eureka Client, MyBatis, MySQL。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>goods-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
在application.yml文件中配置Eureka、MySQL及MyBatis:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
datasource:
url: jdbc:mysql://localhost:3306/shop?useSSL=false
username: root
password: password
mybatis:
mapper-locations: classpath:mapper/*.xml
在启动类上添加@EnableEurekaClient注解。
创建goods-consumer服务
接下来,创建另一个名为goods-consumer的服务,同样基于Spring Boot,并添加必要的依赖如Web, Eureka Client, Feign, Thymeleaf等。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在application.yml中进行相应的配置:
feign:
hystrix:
enabled: true
spring:
thymeleaf:
cache: false
启动类需添加@EnableEurekaClient和@EnableFeignClients注解。
查询商品列表
在goods-provider中定义接口用于查询商品信息,并在goods-consumer中调用该接口来展示商品列表。
步骤1:定义查询接口
在GoodsDao接口中定义方法:
List<Goods> getAllGoods();
Goods getGoodsById(Long id);
并在对应的Mapper XML文件中编写SQL语句。
步骤2:消费者端调用
在GoodsService接口中使用Feign客户端调用provider接口:
@FeignClient(name = "goods-provider", fallback = GoodsServiceFallback.class)
public interface GoodsService {
@GetMapping("/goods/all")
List<Goods> getAllGoods();
}
最后,在GoodsController中处理请求并渲染视图。
查询商品详情
点击商品列表中的"详情"链接,可以查看具体商品的详细信息。这需要在GoodsController中添加新的请求映射,并在前端页面中显示详细信息。