谷粒商城【商城系统】完整总结
文章目录
- 项目运行的步骤
- 项目源码地址
- 模块说明
- 商城项目基础篇总结
- 项目知识点总结
- 效果图展示
- 商城项目高级篇总结
- 项目知识点总结
- 效果图展示
- 项目中遇到的问题
- 1. node版本与sass版本不对应
- 2. 测试单元的 @Test 前面没有运行图标
- 3. 前端category-cascader.vue报如下错误
- 4. 后台启动程序报如下错误
- 5. win10系统升级导致VirtualBox启动报错
- 6. p100出现400页面找不到错误
- 7. 通过在首页点击分类名称,跳转到检索页面,路径错误
- 8. 引入seata依赖,启动项目报错
- 9. 下单操作模拟远程服务异常,使用seata
- 10. 控制台报seata的相关错误
项目相关学习笔记:
- 项目架构图:https://blog.csdn.net/weixin_45606067/article/details/110143227
- 虚拟机中软件环境:https://blog.csdn.net/weixin_45606067/article/details/109629397
- 高级篇笔记(1/2):https://blog.csdn.net/weixin_45606067/article/details/123940860
- 高级篇笔记(2/2):https://blog.csdn.net/weixin_45606067/article/details/124472496
项目运行的步骤
环境:
- 安装虚拟机VMware中安装Centos7 或者 参考老师讲解的VirtualBox安装vagrant
- 虚拟机中安装docker,rabbitmq,nginx,kibana,elasticsearch,redis,mysql
- 本地安装idea(要有lombok插件),vscode,navicat,Redis Desktop Manager
- 本地 JDK(1.8),maven(3.6.3),nacos(1.4.1),natapp【解决内网穿透】环境
- 本地 node(12.19.0)、npm (6.14.8)环境
服务器:
- 项目静态资源放在nginx中,位置
/mydata/nginx/html/static
- 配置nginx的配置文件
nginx.conf
文件【位置:/mydata/nginx/conf
】
gulimall.conf
文件【位置:/mydata/nginx/conf/conf.d
】
后端:
- 域名配置【host文件:
C:\Windows\System32\drivers\etc
】
# 谷粒商城域名访问
192.168.187.100 gulimall.com
192.168.187.100 search.gulimall.com
192.168.187.100 item.gulimall.com
192.168.187.100 auth.gulimall.com
192.168.187.100 cart.gulimall.com
192.168.187.100 order.gulimall.com
192.168.187.100 member.gulimall.com
192.168.187.100 seckill.gulimall.com
# 测试单点登录
127.0.0.1 sso.com
127.0.0.1 client1.com
127.0.0.1 client2.com
将数据导入navicat中,确保数据能连接上。
拉取 gulimall-parent 项目到本地,导入idea中【保证maven依赖不报错,字符集都是UTF-8】
修改各模块中mysql,nacos,redis,rabbitmq地址等配置
修改 gulimall-order 模块中 支付宝相关的配置信息,主要是修改
alipay.notify_url
地址为自己的natapp的【否则支付功能不好使】修改 gulimall-third-party 模块中 阿里云oss,sms线管配置信息
启动各个模块,并查看控制台有没有报错
浏览器访问:
http://gulimall.com
测试某个模块的接口 可使用swagger进行测试
前端:【管理端】
- 拉取 gulimall-vue 项目到本地,导入vscode
- 使用
npm install
安装依赖 - 使用
npm run dev
启动项目 - 浏览器访问:
http://localhost:8001/
(账号密码:admin/admin)
项目源码地址
后端项目源码:https://gitee.com/StarSea007/gulimall-parent
前端项目源码:https://gitee.com/StarSea007/gulimall-vue
项目静态资源:https://github.com/StarSea99/gulimall-image
项目对应学习视频:https://www.bilibili.com/video/BV1np4y1C7Yf?p=1
后端接口文档:https://easydoc.net/s/78237135
主要包括如下:
- 项目中所需要的SQL文件;
- 学习项目中遇到的问题,及解决办法;
- 前面说到的知识点的详细步骤说明, 及注意事项。
- 各个阶段的学习笔记。
觉得对你有帮助可以 Star
,Fork
一下!!!!
模块说明
gulimall
├── gulimall-auth -- 认证中心(社交登录、OAuth2.0、单点登录)
├── gulimall-cart -- 购物车服务
├── gulimall-common -- 工具类及通用代码
├── gulimall-coupon -- 优惠卷服务
├── gulimall-gateway -- 统一配置网关
├── gulimall-member -- 会员服务
├── gulimall-order -- 订单服务
├── gulimall-product -- 商品服务
├── gulimall-search -- 检索服务
├── gulimall-seckill -- 秒杀服务
├── gulimall-test-sso-client -- 测试单点登录客户端
├── gulimall-test-sso-server -- 测试单点登录服务端
├── gulimall-third-party -- 第三方服务
├── gulimall-ware -- 仓储服务
├── renren-fast -- 人人开源项目的管理端
└── renren-generator -- 人人开源项目的代码生成器
商城项目基础篇总结
项目知识点总结
1、分布式基础概念
- 微服务、注册中心、配置中心、远程调用、Feign、 网关
2、基础开发
- SpringBoot2.0、 SpringCloud、 Mybatis-Plus、 Vue组件化、 阿里云对象存储OSS、Element UI
3、环境
- Vagrant、 Linux、 应用容器引擎Docker、 MySQL、 Redis、 逆向工程&人人开源
4、开发规范
- 数据校验JSR303、全局异常处理、全局统一返回、全局跨域处理。
- 枚举状态、业务状态码、VO与TO与PO划分、逻辑删除。
- Lombok:@Data、 @Slf4j
效果图展示
登录页面
用户名密码:admin/admin分类维护
品牌管理
规格参数、属性分组、销售属性
发布商品
商品管理
商品库存、采购单
其余的页面可以运行项目自行查看。
商城项目高级篇总结
项目知识点总结
1、SpringCloud Alibaba组件
- Nacos【配置中心,注册中心】、Sentinel、Seata
2、SpringCloud组件
- OpenFegin、Gateway、Sleuth + Zipkin 服务链路追踪
3、技术点
- 搜索引擎ElasticSearch、消息队列RabbitMQ、分布式缓存Springsession
3、其他
- 分布式锁redisson、模板引擎thymeleaf
- Reactive&WebFlux 响应式编程、本地事务&分布式事务
- 性能与压力测试、缓存与分布式锁
- 异步&线程池、单点登录与社交登录
- 商城业务(购物车,订单,秒杀)、支付宝支付
- 定时任务与分布式调度
高并发重要的三点:缓存、异步、队排好。
效果图展示
登录页
首页
搜索页
详情页
结算页
收银页
支付宝页
我的订单页
项目中遇到的问题
1. node版本与sass版本不对应
原因:前端项目安装依赖:Python27环境问题,node版本与sass版本不对应。
node环境与sass不兼容问题,详情查看:https://github.com/sass/node-sass
建议:node使用12.x 以下的版本,不支持14.x新版。
解决方法:卸载当前的node,重新去官网下载并安装即可。
我的环境如下:
C:\Users>node -v
v12.19.0C:\Users>npm -v
6.14.8
2. 测试单元的 @Test 前面没有运行图标
- IDEA内:File - Setting - Plugins:搜到
JUnitGenerator2.0
,安装,重启IDEA - 在类上写两个注解:
@RunWith(SpringJUnit4ClassRunner.class)
和@SpringBootTest
- 类名上必须用 public 修饰
- 在类中写的方法上加上 @Test 注解,运行标志出现,可以运行。
3. 前端category-cascader.vue报如下错误
关于pubsub、publish报错,无法发送查询品牌信息的请求:
1、npm install --save pubsub-js
2、在src下的main.js中引用:
① import PubSub from ‘pubsub-js’
② Vue.prototype.PubSub = PubSub
4. 后台启动程序报如下错误
com.alibaba.nacos.api.exception.NacosException: java.lang.reflect.InvocationTargetException Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank
报错原因:导入了nacos配置中心,而配置文件又没有配置。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
解决:
- 移除该依赖;
- 在application.yml中配置nacos配置中心
总结:此报错不影响项目的启动和正常运行,可以忽略。
5. win10系统升级导致VirtualBox启动报错
错误原因:win10系统升级导致的。
解决方法:在window系统中找到对应的虚拟网卡,禁用设备并重新启用即可。
6. p100出现400页面找不到错误
原因:就是当初我们执行了一个sys_menus.sql文件,作用就是创建了很多菜单。就像我们第一次创建商品前端时,在菜单管理里面新建了商品管理的菜单,sys_menus.sql文件就是帮我们创建其余菜单。问题时sys_menus.sql少创建了‘规格维护’这个菜单,路由是product/attrupdate。由于没有创建菜单,前端路由自然就找不到页面,就报400错误。
解决方法1:和之前一样,在系统管理下的菜单管理新建‘规格维护’菜单即可,解决方法其实就是直接sql新建菜单:(不推荐)
INSERT INTO sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num) VALUES (76, 37, '规格维护', 'product/attrupdate', '', 2, 'log', 0);
解决方法2:在前端代码 src/router/index.js 文件中,定义 mainRoutes 时在 children 中定义一行路由(40 行):(推荐使用)
{ path: '/product-attrupdate', component: _import('modules/product/attrupdate'), name: 'attr-update', meta: { title: '规格维护', isTab: true } }
这样做可以避免左侧菜单栏出现一个多余的菜单。
原理是前端的路由是由 vue-router 负责的,在路由初始化时会从数据库查询定义的菜单并注册成路由,如果直接在前端注册成路由就不用先定义成菜单了。
7. 通过在首页点击分类名称,跳转到检索页面,路径错误
1)通过在首页点击分类名称,跳转到检索页面,并根据分类名称进行检索
在首页点击手机,页面却跳转到了 http://search.gmall.com/list.html?catalog3Id=225
,路径错误
经过排查,发现是 catalogLoader.js
文件中的路径错了,进入linux的 /mydata/nginx/html/static/index/js
文件夹下的catalogLoader.js
文件,将文件中的请求路径改正确。
重启nginx服务在其访问就正常了。
2)通过在首页输入检索关键字,点击搜索跳转到检索页面,并根据检索关键字进行检索
在首页gulimall.com页面输入dada点击搜索,发现跳转的页面不正确
修改index.html 文件下 search() 方法的加载地址:
<script type="text/javascript">function search() {var keyword=$("#searchText").val()window.location.href = "http://search.gulimall.com/list.html?keyword=" + keyword;}
</script>
刷新项目在次访问就正常了。
8. 引入seata依赖,启动项目报错
如果我们将依赖放在gulimall-common服务中,那么再启动其他服务时就会报错:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.siro.gulimall.gateway.GulimallGatewayApplication]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/web/servlet/config/annotation/WebMvcConfigurer.class] cannot be opened because it does not exist
原因:是需要将两个配置文件依次放在这各个服务中,所以我们可将用到分布式事务的seata依赖放在该服务中,在gulimall-order和gulimall-ware服务中导入依赖:
<!--整合seata分布式事务-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><exclusion><groupId>io.seata</groupId><artifactId>seata-all</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>io.seata</groupId><artifactId>seata-all</artifactId><version>0.7.1</version>
</dependency>
如果seata依赖不识别,需要再pom文件中加入 :
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
重新创新maven依赖,重启项目就好了。
9. 下单操作模拟远程服务异常,使用seata
使用 seata来解决分布式事务问题,下单操作的方法加上 @GlobalTransactional 注解,业务代码使用 int i = 10/0;
模拟远程服务出问题。
原因:seata 0.7.1 不支持批量保存。需要改成循环遍历插入数据。
这是我找的对问题的详细说明:https://wenku.baidu.com/view/3b89e53dfc00bed5b9f3f90f76c66137ee064f28.html
如果想更新项目的依赖版本可以参照:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
10. 控制台报seata的相关错误
- 可以在报错的模块中,在主启动类上排除
GlobalTransactionAutoConfiguration
自动配置类 - 删除掉项目中seata相关的代码【因为目前项目中没有用到,视频学习中用到了】
如果有收获! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
谷粒商城【商城系统】完整总结相关推荐
- php移动商城源码,GitHub - longmix/shopmallmobile: 商城系统源代码移动商城版本,完整的服务器调用,商品展示/用户中心/订单/支付/购物车/功能齐全...
免费商城软件源代码 商城系统源代码是延誉宝电商系统的移动商城版本,包含了完整的服务器调用,商品展示/用户中心/订单/支付/购物车/功能齐全. 与网上下载的各类代码和二次开发复杂商城不同,延誉宝免费商城 ...
- 【计算机毕业设计】512网上商城购物系统
一.系统截图(需要演示视频可以私聊) 摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,网上商城购物系统当然也不能排除在外.网上商城 ...
- cms php 带商城系统下载,开源免费PHP商城CMS系统集合
随着互联网商业的兴起,世面上商城系统越来越多,国内外各类商城cms系统数不胜数.但是真正用得舒服的并不是很多,国内的很多商城系统不仅功能不足,而且还价格昂贵.本文就收集了几款免费开源的商城cms,以备 ...
- 网上商城购物系统(2)
详细内容请看☟☟☟ 网上商城购物系统(1) 这是前面的完整的语句 -----------------------------创建表----------------------------------- ...
- [附源码]Python计算机毕业设计SSM化妆品网上商城数据分析系统(程序+LW)
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- [附源码]JAVA+ssm网上商城比价系统(程序+Lw)
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 亿级商城促销系统架构设计与实践
作者:vivo互联网官方商城开发团队-Liu JianZhu 一.前言 随着商城业务渠道不断扩展,促销玩法不断增多,原商城v2.0架构已经无法满足不断增加的活动玩法,需要进行促销系统的独立建设,与商城 ...
- 天猫商城在线购物系统
天猫商城在线购物系统 本博文对Gitee开源项目 SpringBoot迷你天猫商城(Mini-Tmall)中的商品管理和商品分类管理进行讲解. 在此也感谢开源项目作者@贤趣项目小组 在此附上原项目链接 ...
- JAVA计算机毕业设计SEOUL设计师品牌代购商城Mybatis+系统+数据库+调试部署
JAVA计算机毕业设计SEOUL设计师品牌代购商城Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计SEOUL设计师品牌代购商城Mybatis+系统+数据库+调试部署 本源码技术栈: 项目 ...
- 商城购物系统【用户登录注册,购物页面,购物车页面,订单页面】
商城购物系统 文章目录 商城购物系统 前言 一.使用Mysql数据库建立需要用的商品表,用户表 二.利用html+cs+js对前台进行设计 效果如下 2.对商品页与购物车页进行设计 总结 前言 这学期 ...
最新文章
- [ZZ]知名互联网公司Python的16道经典面试题及答案
- [转载]TFS与Project、Excel同步
- 学习笔记(23):Python网络编程并发编程-开启线程的两种方式
- 福建省计算机初级职称,2019福建助理工程师职称评定条件材料及审核管理制度...
- 复杂语境下的实体关系抽取
- 许昌市襄县机器人_襄城县机器人自动码垛机生产工厂批发销售
- php预处理的fetch函数,php 预编译查询始终fetch不到数据解决方案
- cve-2014-7911安卓提权漏洞分析
- [刘阳Java]_Spring相关配置介绍_第5讲
- 2022年下半年系统集成项目管理工程师(软考中级)报名条件
- STM32示波器设计
- [转]centos安装oracle
- 2022卡塔尔世界杯赛程直播北京时间_足球世界杯对阵表图完整全部
- 【HCIE-BigData-Data Mining课程笔记(三)】预备知识-Python基础
- 扎克伯格“致敬”微信,但Facebook Pay能像微信支付一样成功吗?
- 台式机通过笔记本的WIFI上网
- 如何成为一个区块链开发人员_成为开发人员是社会工作
- 什么是字节码?采用字节码的最大好处是什么?
- node快速搭建后台
- 计算机是如何执行程序的(转)
热门文章
- 【Python】所有常用Python库和功能查询表
- java游戏txt_java游戏泡泡龙
- 五镜头无人机倾斜摄影POS编辑小程序
- FontForge 修改,删除,设计字体
- [转载] 高大上的 CSS 效果:Shape Blobbing
- XPT2046 四线电阻式触摸屏
- 特斯拉阀:被遗忘的天才之阀
- P4556 [Vani有约会] 树上差分 + 线段树合并
- mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
- Android studio 快速“Gradle的依赖缓存可能损坏”问题