Project Icon

SuperMarket

基于SpringCloud的综合电商平台

SuperMarket是基于SpringCloud开发的开源综合电商平台,采用Java微服务架构设计。系统涵盖用户、商品、购物车、订单、搜索、秒杀等核心模块,实现完整的在线购物流程。项目采用Docker容器化部署,集成MySQL主从复制、Redis和Elasticsearch集群等高可用方案。代码结构清晰,遵循MVC设计模式,适合学习研究和进一步开发。

网上商城

截图展示

商品页面
注册页面
登录页面
购物车
订单
检索
管理商品
新增商品
秒杀

声明

  • 未经许可不得将本项目商用,如需商用请联系作者zxr@tju.edu.cn
  • 欢迎各位看官向本项目提交代码,对提交的分支我将进行合并。提交时请务必保证能编译能运行

关键技术

基于SpringCloud框架开发的商城系统,代码严格遵循MVC分层思想,可部署到服务器上,设计精良,不断完善

包结构说明

  • com.supermarket.*.filter对应于微服务的过滤器
  • com.supermarket.*.listener对应于微服务的监听器
  • com.supermarket.*.controller对应于微服务的controller层
  • com.supermarket.*.aspect对应于微服务的切面类
  • com.supermarket.*.service对应于微服务的service层
  • com.supermarket.*.dao对应于微服务的持久层
  • com.supermarket.*.schedule对应于微服务的定时任务
  • com.supermarket.*.exception对应于微服务的自定义异常
  • com.supermarket.*.domain对应于微服务的JavaBean
  • com.supermarket.*.utils对应于微服务的工具类
  • com.supermarket.*.vo对应于微服务的ViewObject

系统架构

架构图

功能说明

用户微服务(com.supermarket.user)

  • 用户登录
  • 免验证码登录
  • 用户注册
  • 用户登出
  • 用户名可用性校验
  • 用户登录状态获取
  • 查询用户权限等级

商品微服务(com.supermarket.product)

  • 分页查询
  • 单个商品查询
  • 商品新增
  • 商品修改
  • 查询全部商品

公共资源微服务(com.supermarket.common)

  • 公共资源微服务同时也是SpringCloud的Eureka模块
  • 提供了常用的JavaBean, ViewObject, 工具类

zuul网关(com.supermarket.gateway)

  • SpringCloud的zuul网关模块
  • 对敏感API调用进行后端鉴权

图片微服务(com.supermarket.image)

  • 图片上传功能
  • 生成验证码功能
  • 清除验证码在redis中的缓存

购物车微服务(com.supermarket.cart)

  • 购物车查询
  • 购物车新增商品
  • 购物车删除商品
  • 购物车修改商品
  • 购物车价格查询

订单微服务(com.supermarket.order)

  • 新增订单
  • 删除订单
  • 查询订单

检索微服务(com.supermarket.search)

  • 分页检索
  • 新增商品
  • 删除商品
  • 建立索引

秒杀微服务(com.supermarket.instantbuy)

  • 全部秒杀商品查询
  • 单个秒杀商品查询
  • 发起秒杀

新版本部署教程

  1. 环境准备
    1. 开发环境准备:首先你需要有一台电脑、以及一个虚拟机(或服务器)。内存要大,不然跑不起来。假设你的虚拟机的ip地址是192.168.137.147在你的电脑中把hosts追加两行。
      192.168.137.147 www.supermarket.com
      192.168.137.147 image.supermarket.com
      然后添加环境变量
      DOCKER_HOST=tcp://192.168.137.147:2375
    2. 部署环境准备:虚拟机装上centos7,再装上docker,然后依次拉取镜像
      docker pull zongxr/redis:3.2.11
      docker pull zongxr/mycat:1.15.1
      docker pull zongxr/mysql:5.7.37
      docker pull zongxr/elasticsearch:6.8.6
      docker pull zongxr/supermarket-cart:1.0-SNAPSHOT
      docker pull zongxr/supermarket-user:1.0-SNAPSHOT
      docker pull zongxr/supermarket-gateway:1.0-SNAPSHOT
      docker pull zongxr/supermarket-eureka:1.0-SNAPSHOT
      docker pull zongxr/supermarket-image:1.0-SNAPSHOT
      docker pull zongxr/supermarket-search:1.0-SNAPSHOT
      docker pull zongxr/supermarket-instantbuy:1.0-SNAPSHOT
      docker pull zongxr/supermarket-product:1.0-SNAPSHOT
      docker pull zongxr/supermarket-order:1.0-SNAPSHOT
      然后把start_up目录拷贝到/home目录下
  2. 部署数据库
    1. 参照数据库启动脚本逐行执行,或直接运行该脚本。
    2. 由于官方的mysql镜像没有默认开启主从配置,也没设定UTF-8字符集,因此使用本项目专有镜像zongxr/mysql:5.7.37,可自动开启bin-log,并设定UTF-8字符集
    3. 该脚本制作了双向主从高可用的数据分片,节点分别为dn1_host1, dn1_host2, dn2_host1, dn2_host2。并且通过mycat实现了读写分离以及分库分表,最后灌入数据。如果上一步执行成功了,你将能够通过以下的JDBC连接上数据库 jdbc:mysql://192.168.137.147:3306/supermarket连接dn1_host1
      jdbc:mysql://192.168.137.147:3307/supermarket连接dn1_host2
      jdbc:mysql://192.168.137.147:3308/supermarket连接dn2_host1
      jdbc:mysql://192.168.137.147:3309/supermarket连接dn2_host2
      jdbc:mysql://192.168.137.147:8066/supermarket连接mycat
  3. 部署redis集群
    1. 参照redis启动脚本逐行执行,或者直接运行该脚本
    2. 该脚本搭建了一个6节点的redis集群,从redis-1到redis-6。由于3.2.11版本的redis官方镜像没有预置ruby环境,而创建集群需要使用ruby环境。因此使用该项目的专用redis镜像zongxr/redis:3.2.11,该镜像已经集成了ruby环境可直接使用。
    3. 如果上一步redis集群部署成功了,那么可以通过6379端口连接该集群
  4. 部署elasticsearch集群
    1. 参照elasticsearch启动脚本逐行执行,或直接运行该脚本
    2. 该脚本搭建了3节点的elasticsearch集群,分别是es-1, es-2, es-3。如果部署成功了,可以使用head插件连接http://192.168.137.147:9200/地址,集群状态应为green
    3. 官方默认的elasticsearch镜像不带JDBC连接功能,该项目通过技术手段集成了JDBC连接功能,可以像操作关系型数据库一样写SQL去操作elasticsearch。使用的driver是org.elasticsearch.xpack.sql.jdbc.EsDriver
      jdbc:es://192.168.137.147:9201连接es-1
      jdbc:es://192.168.137.147:9202连接es-2
      jdbc:es://192.168.137.147:9200连接es-3
  5. 部署微服务
    1. 参照微服务启动脚本逐行执行,或直接运行该脚本
    2. 每个微服务做了一个镜像,名为zongxr/supermarket-xxx:tag。如果所有微服务都启动成功了,那么将能够在注册中心看到所有注册的微服务,并且在http://192.168.137.147:APP_PORT/swagger-ui/网址能够看到该微服务对应的接口文档
    3. instant-buy微服务用到了消息队列rabbitmq。如果消息队列启动成功,将能够在Web UI管理界面看到传输的消息,用户名密码均为guest
  6. 至此,所有服务都已经启动完成了。访问www.supermarket.com进行访问即可。

旧版本部署教程

交流群

点击链接加入群聊【Supermarket项目交流群】:https://jq.qq.com/?_wv=1027&k=wlpUy5jo
交流群二维码

版本迭代

版本号更新内容上传时间
0.1
  • 初步完成项目方案确定
  • 完成主页及注册页面的静态资源编写(包括js,css)
  • 完成主页及注册页面的动态资源编写(包括jsp,servlet)
  • 通过jdbc链接MySQL数据库
  • 使用c3p0连接池
2020年8月3日
0.1.1
  • 可以选择使用哪个连接池,并且在web.xml中指定,现在可以使用DBCP连接池
  • 通过反射机制设置如果指定连接池调用失败,再调用哪个连接池
  • 使用Ajax技术完成前端用户名校验
  • 更改img标签的src属性,使浏览器异步发送GET请求,刷新验证码
2020年8月7日
0.1.2
  • 使用JDBC.properties进行全局JDBC配置
  • 去掉JDBC的反射调用
  • 使用cookie完成记住用户名功能
  • 新增登录功能:使用session完成会话级别的数据传递
  • 新增注销功能:通过ajax请求销毁session
  • 修改静态页面,使其实现对logo.png的单独依赖
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号