基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(下)

操作系统:Windows

Java开发包:JDK1.8

项目管理工具:Maven3.6.0

项目开发工具:IntelliJIDEA

数据库:MySQL

Spring Cloud版本:Finchley.SR2

Spring Boot版本:2.0.6.RELEASE

目录
  • 商品模块实现
    • 搭建goods-provider
      • 步骤1:创建项目,引入依赖
      • 步骤2:在全局配置文件application.yml中添加Eureka、MySQL以及MyBatis的相关配置
      • 步骤3:在项目启动类添加@EnableEurekaClient注解
  • 搭建goods-consumer
    • 步骤1:创建项目,引入依赖
      • 步骤2:在全局配置文件application.yml中添加Eureka和Thymeleaf的相关配置信息
      • 步骤3:在项目启动类添加@EnableEurekaClient和@EnableFeignClients注解
  • 查询商品列表
    • 步骤1:在工程goods-provider中定义查询商品信息接口
    • 步骤2:在工程goods-consumer中调用goods-provider中的接口实现商品查询功能
  • 查询商品详情
  • 总结

商品模块实现

搭建goods-provider

步骤1:创建项目,引入依赖

在父工程web-store中创建Moudle,使用Spring Initializr方式创建一个名称为goods-provider的Spring Boot项目,将Artifact命名为goods-provider,添加Web、Eureka Client、MyBatis、公共实体类common、MySQL依赖。

<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bushuo</groupId> <artifactId>goods-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>goods-provider</name> <description>Demo project for Spring Boot</description> <url/> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!--mybatis依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <!--eureka依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
步骤2:在全局配置文件application.yml中添加Eureka、MySQL以及MyBatis的相关配置

步骤3:在项目启动类添加@EnableEurekaClient注解

在项目启动类上添加@EnableEurekaClient注解开启Eureka Client功能。

搭建goods-consumer

步骤1:创建项目,引入依赖

在父工程web-store中创建Moudle,使用Spring Initializr方式创建一个名称为goods-consumer的Spring Boot项目,将Artifact命名为goods-consumer,添加Web、Eureka Client、公共实体类common、Feign、Thymeleaf、Hystrix等依赖。

<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bushuo</groupId> <artifactId>goods-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>goods-consumer</name> <description>Demo project for Spring Boot</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.bushuo</groupId> <artifactId>common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--feign依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.0.RELEASE</version> </dependency> <!--web依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--eureka依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--thymeleaf前端模板依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--hystrix熔断依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.0.0.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
步骤2:在全局配置文件application.yml中添加Eureka和Thymeleaf的相关配置信息

步骤3:在项目启动类添加@EnableEurekaClient和@EnableFeignClients注解

在项目启动类上添加@EnableEurekaClient注解开启Eureka Client功能,添加@EnableFeignClients注解开启Feign功能。

查询商品列表

步骤:

1.在工程goods-provider中定义查询商品接口

2.goods-consumer调用goods-provider中的接口实现查询商品功能

  1. 启动测试查询商品信息功能

步骤1:在工程goods-provider中定义查询商品信息接口

(1)在dao包的GoodsDao接口中,添加查询所有商品信息的方法、根据id查询商品方法

(2)在resources下的mapper包中的GoodsMapper.xml文件中配置商品查询接口

(3)在controller包中的GoodsController类中添加查询接口


goods-consumer程序结构:

步骤2:在工程goods-consumer中调用goods-provider中的接口实现商品查询功能

(1)在GoodsService接口中编写Feign组件调用goods-provider中接口的查询方法

(2)在GoodsServiceHystrix类中编写处理查询的熔断处理逻辑

(3)在GoodsController类中添加退出登录的请求/quit,返回到登录页面

(4)在GoodsController类中添加查询所有商品列表的请求

因登录成功后直接跳转到首页显示商品列表,要获取登录名显示在首页上,故修改user-consumer中的UserController中的/login请求如下:

(5)在resources下的templates目录中创建静态页面

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/html"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>首页</title> </head> <body> <div th:if="${session.uname} ne null"> 欢迎您:<em th:text="${session.uname}"></em><br> <a href="http://localhost:8005/goods/quit">退出</a> </div> <div th:if="${session.uname} eq null"> <a href="http://localhost:8003/admin/tologin">请您登陆</a> </div> <h1 align="center">首页</h1> <div align="center"> <form action="/goods/getName"> 商品名:<input type="text" name="name" placeholder="搜索商品"/> <input type="submit" value="搜索"/> </form> <table style="border:1px solid;width:600px;text-align:center"> <thead> <tr bgcolor="green"> <td>编号</td> <td>名称</td> <td>操作</td> </tr> </thead> <tbody> <tr th:each="good:${goods}"> <td th:text="${good.gid}"></td> <td th:text="${good.gname}"></td> <td> <a th:href="@{'http://localhost:8005/goods/detail?id='+${good.gid}}">详情</a> <a th:href="@{'http://localhost:8005/goods/deleteGoods?id='+${good.gid}}">删除</a> </td> </tr> </tbody> </table> <h3><a href="http://localhost:8005/goods/toAddGoods">添加新商品</a></h3><br> </div> </body> </html>

在登录页面上输入正确的用户名密码测试,能否跳转到getAll请求显示商品列表。
不能跳转
http://localhost:8005/goods/getAlluname=

查询商品详情

商品列表中点击"详情"链接,即可跳转到当前商品详情页面。

思路:点击详情链接的同时,将当前商品的id传递到处理的请求中,根据id查询出当前商品所有具体信息。

(1)在GoodsController类中添加查询商品详情的请求

(2)在resources下的templates目录中创建静态页面

detail.html:

删除商品
商品列表中点击"删除"链接,即可将当前商品从列表中清除。

思路:点击删除链接的同时,将当前商品的id传递到删除的请求中,根据id从商品表中将当前商品删除。
步骤1:在工程goods-provider中定义商品删除接口
(1)在dao包的GoodsDao接口中,添加删除商品信息的方法、根据id删除商品

(2)在resources下的mapper包中的GoodsMapper.xml文件中配置商品删除接口

(3)在controller包中的GoodsController类中添加删除商品接口

步骤2:在工程goods-consumer中调用goods-provider中的接口实现商品删除功能

(1)在GoodsService接口中添加商品删除方法deleteGoods的声明

(2)在GoodsServiceHystrix类中编写处理删除的熔断处理逻辑

(3)在GoodsController类中添加删除商品的请求

如果日志是登入失败,查看源码.

总结

基于Spring Cloud的电商系统在用户与商品模块的设计与实现中,注重了系统的安全性、灵活性和用户体验。通过微服务架构,系统不仅能够支持高并发请求,还能方便地进行功能扩展。未来,可以结合人工智能与大数据分析,进一步优化用户推荐系统和库存管理,提升整体运营效率和用户满意度