All Projects → GoogleLLP → Supermarket

GoogleLLP / Supermarket

Licence: agpl-3.0
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器上,不断完善中……

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Supermarket

Pdf
编程电子书,电子书,编程书籍,包括C,C#,Docker,Elasticsearch,Git,Hadoop,HeadFirst,Java,Javascript,jvm,Kafka,Linux,Maven,MongoDB,MyBatis,MySQL,Netty,Nginx,Python,RabbitMQ,Redis,Scala,Solr,Spark,Spring,SpringBoot,SpringCloud,TCPIP,Tomcat,Zookeeper,人工智能,大数据类,并发编程,数据库类,数据挖掘,新面试题,架构设计,算法系列,计算机类,设计模式,软件测试,重构优化,等更多分类
Stars: ✭ 12,009 (+839.67%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, spring, springboot, springcloud, rabbitmq
Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+4187.72%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, spring, springboot, springcloud, rabbitmq
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+700.94%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, springboot, springcloud, rabbitmq
Learningsummary
涵盖大部分Java进阶需要掌握的知识,包括【微服务】【中间件】【缓存】【数据库优化】【搜索引擎】【分布式】等等,欢迎Star~
Stars: ✭ 201 (-84.27%)
Mutual labels:  mybatis, mysql, elasticsearch, spring, springboot, springcloud, springmvc
Javaall
这是一个Java开发宝典,所有的Java技术都在这里,用心学习,努力提升!
Stars: ✭ 67 (-94.76%)
Mutual labels:  mybatis, mysql, redis, spring, springboot, springcloud, springmvc
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+516.12%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, springboot, springcloud, rabbitmq
Echo
🦄 开源社区系统:基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。
Stars: ✭ 129 (-89.91%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, spring, springboot, springmvc
Goodskill
🐂基于springcloud +dubbo构建的模拟秒杀项目,模块化设计,集成了分库分表、elasticsearch🔍、gateway、mybatis-plus、spring-session等常用开源组件
Stars: ✭ 786 (-38.5%)
Mutual labels:  mybatis, redis, elasticsearch, springboot, springcloud, rabbitmq
Javacollection
Java开源项目之「自学编程之路」:学习指南+面试指南+资源分享+技术文章
Stars: ✭ 2,957 (+131.38%)
Mutual labels:  mysql, redis, spring, springboot, springcloud, rabbitmq
Perfect Ssm
🍇更完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis)
Stars: ✭ 606 (-52.58%)
Mutual labels:  mybatis, mysql, redis, spring, springboot, springmvc
Springboot mybatisplus
SpringBoot集成MyBatisPlus
Stars: ✭ 199 (-84.43%)
Mutual labels:  mybatis, mysql, redis, spring, springboot
Lyonblog
基于Java8的SSM+Elasticsearch全文检索的个人博客系统
Stars: ✭ 169 (-86.78%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, springmvc
Java-CS-Record
记录准备春招实习过程中,学习与复习的知识(模块化整理,非面试题速成)。注:暂停更新,后续请移步博客
Stars: ✭ 73 (-94.29%)
Mutual labels:  rabbitmq, springboot, mybatis, springmvc, springcloud
Tutorial
Java全栈知识架构体系总结
Stars: ✭ 407 (-68.15%)
Mutual labels:  mysql, redis, spring, springboot, springcloud
Spring Boot Vue Bank
我,请始皇[打钱]是一个前后端分离的工具人系统,项目采用 SpringBoot+Go+Vue 开发,项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等(主要是多用用工具多踩踩坑)。
Stars: ✭ 157 (-87.72%)
Mutual labels:  mybatis, mysql, redis, spring, springboot
Seckill Demo
一个简单的SSM框架的商品秒杀系统🦄
Stars: ✭ 315 (-75.35%)
Mutual labels:  mybatis, mysql, redis, spring, springmvc
Student Homework Management System
使用SSM+Shiro开发的学生作业管理系统。支持批量打包下载,QQ登陆等功能 生产版:
Stars: ✭ 79 (-93.82%)
Mutual labels:  mybatis, mysql, spring, springmvc, jquery
Onemall
芋道 mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。
Stars: ✭ 5,312 (+315.65%)
Mutual labels:  mysql, redis, elasticsearch, springboot, springcloud
Javacore
Java程序员所需要掌握的核心知识: 集合框架&JVM机制&多线程与并发框架&网络协议&Spring&Dubbo&MySQL&微服务等;希望胖友小手一抖,右上角来个 Star,感恩 1024
Stars: ✭ 73 (-94.29%)
Mutual labels:  mysql, spring, springboot, springcloud, springmvc
Sns Forum Website
牛客网高级项目(SNS+社区问答类网站)
Stars: ✭ 143 (-88.81%)
Mutual labels:  mybatis, mysql, redis, elasticsearch, springboot

网上商城

截图展示

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

声明

  • 本项目静态资源由网络收集得来,并加以大范围修改
  • 未经许可不得将本项目商用,如需商用请联系作者[email protected]

关键技术

基于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)

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

交流群

点击链接加入群聊【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的单独依赖
2020年8月9日
0.2
  • 使用EL表达式替换jsp页面中的脚本表达式
  • 修改静态资源,主页增加右下角浮动项以及向上返回功能
  • 新增错误页面提示
  • 重构为JavaEE三层经典架构
2020年8月20日
0.2.1
  • 使用过滤器完成全局请求参数拦截处理,包括全局中文乱码处理、全局password请求参数加密
  • 通过过滤器实现全局连接池选定
  • 通过过滤器实现自动登录功能
  • 通过装饰者模式扩展request对象
2020年8月22日
0.2.2
  • 使用log4j框架进行日志记录
  • 修复重启服务器自动登录失效的bug
  • 加入网页标题图标
2020年8月24日
0.2.3
  • 将JDBC初始化功能交由监听器实现,并移除对应的过滤器
  • 使用过滤器实现JDBC反注册,避免内存泄漏
  • 使用注解替代web.xml完成servlet和监听器的注册
  • 重写前端校验,对于支持html5的浏览器使用其自带校验
2020年8月25日
0.3
  • 使用Spring、SpringMVC、MyBatis重构该web应用
  • 使用User类的装饰者模式完成密码的md5加密功能
  • 使用SpringMVC拦截器记录用户的访问请求
  • 使用切面记录错误日志,并统计响应时间
  • 升级log4j为log4j2
  • 使用html5及jQuery相结合的方式进行前端表单校验
2020年9月25日
0.3.1
  • 新增UserDao的SpringJDBC模板类实现
  • 注册用户功能开启事务,修复多个用户同时注册时可能造成用户名重复的bug
2020年9月29日
0.3.2
  • 新增备选的DBCP连接池配置
2020年10月1日
0.4
  • 使用Maven重构依赖
  • 使用SpringCloud重构项目
  • 重构数据库
  • 增加common微服务: 存放共享资源(如JavaBean, 工具类, ViewObject)
  • 增加商品微服务:新增、修改、查询功能
  • 增加用户微服务:用户名校验、注册
  • 增加图片微服务:图片上传
  • 增加nginx:负载均衡、动态静态资源分离
2020年11月10日
0.4.1
  • 新增redis配置,通过redis解决微服务之间数据共享问题
  • 完善用户微服务:实现登录、登出、登录状态获取,修复注册未校验密码一致性的Bug
  • 改进redis数据结构:将key-value改进为hash,从而实现单点登录
  • 使用AOP切面实现登录时长的自动延长
2020年11月12日
0.4.2
  • 调整前端css,增加注册、登录的错误提示
  • 新增注册成功页面
  • 其他前端页面样式的调整
2020年11月13日
0.4.3
  • 完善图片微服务:新增功能生成验证码、验证码缓存清理(避免前端连续请求验证码爆掉redis)
  • 完善用户微服务:登录、注册需要验证码,登录或注册成功后清除验证码缓存(节省redis内存)
  • 完善商品微服务:商品新增、查询、编辑触发被动缓存
2020年11月14日
0.4.4
  • 新增购物车微服务:实现商品查询、商品新增、商品修改、商品删除功能
  • 通过事务实现购买数量后端校验:防止购买量大于库存
  • 在前端实现购买数量校验校验:防止购买量大于库存
2020年11月15日
0.4.5
  • 完善图片微服务:解决redis中验证码缓存无法清理的BUG
  • 完善用户微服务:新增记住用户名、自动登录功能
2020年11月18日
0.4.6
  • 修复自动登录与单点登录功能冲突的bug。
  • 替换网页logo,避免不必要的责任纠纷
2020年11月19日
0.4.7
  • 新增订单微服务:实现订单新增、订单查询、订单删除功能
  • 完善购物车微服务:新增总价格查询功能
  • 数据库迁移至服务器,并通过MyCat管理分库分表
  • 每个数据分片通过双向主从实现MySQL高可用,并开启读写分离
2020年11月24日
0.4.8
  • 新增检索微服务:分页检索、增加文档、删除文档、修改文档
  • 完善商品微服务:查询全部商品
  • 完善前端:进入后台权限校验
2020年11月30日
0.4.9
  • 新增秒杀微服务:全部秒杀商品查询、单个秒杀商品查询、发起秒杀(尚未联调)
  • 修改部分前端页面
2020年12月6日
0.5
  • 完善秒杀微服务:修复若干bug
  • 完善zuul网关:对敏感API调用进行后端鉴权
  • 完善用户微服务:新增权限查询功能
2020年12月9日
0.5.1
  • 完善秒杀微服务:修复发起秒杀功能中的线程安全问题
  • 新增全系统架构图
2020年12月10日
0.5.2
  • 完善秒杀微服务:修复发起秒杀功能中的线程安全问题
  • 完善zuul网关:过滤器实现更细粒度鉴权
  • 完善检索微服务:修复新增和编辑商品时无法同步到elasticsearch的Bug
2020年12月11日
0.5.3
  • 微服务添加熔断器,避免单个故障导致集群崩溃
  • 使用Feign替代Ribbon进行微服务间调用
  • 完善检索微服务:修复微服务启动时创建索引失败的bug
  • 新增log4j2日志框架支持
2020年12月12日

配置情况

遇到的bug锦集(作为记录,博君一笑)

  • HttpServletRequest的装饰者类HttpServletRequestDecorator中的getParameterMap重写方法中,不能在原地进行参数字符集修改,否则如果调用两次及以上该方法时会编码多次,造成乱码
  • 对请求参数的拦截处理,如果用到装饰者模式,最好在一处完成。如果在多处完成会造成请求参数的重复处理,从而导致乱码或者拿到非预期的参数值
  • 用户的登录信息最好保存到session域中,在0.2.1中的自动登录成功后误把user对象塞入到了request域,造成了重启服务器自动登录失效的bug。
  • 使用过滤器将密码加密,不仅要将参数为password的值加密,还要将参数为password2的值加密,否则永远确认密码不一致
  • 使用SpringMVC处理请求参数,如果自动封bean作为方法参数传入,那么该bean所携带的请求参数是不经过过滤器的!原因未知
  • 自动登录最好使用过滤器实现,因为SpringMVC拦截器无法拦截index.jsp。而因为使用过滤器的时候Spring容器还未初始化,所以过滤器的属性需要手工注入
  • 即便上一次响应设置了cookie的path,下一次请求携带的cookie的path也会是null。因此如果要修改或删除cookie,一定要严格满足name, path都设置,否则可能会无效
  • 如果间接依赖了spring-cloud-starter-netflix-eureka-server,一定要把jackson-dataformat-xml排除掉,因为如果不排除掉会导致返回给浏览器的对象是xml格式而非json格式
  • MyBatis如果使用bean传参,不要使用<if>标签内的test属性名应该对应bean属性名而非表的列名。否则会报There is no getter for property named 'xx' in 'class xxx
  • 在Springboot项目中,如果要在application.properties中写自定义配置项,若该配置项为路径字符串,一定要写全路径,从盘符写起,否则会自动在前面拼接tomcat的临时路径
  • html中onsubmit事件要放在form标签内,放在<input type="submit" />标签内无效
  • 启动的时候需要先启动redis再启动微服务,否则会报RedisConnectionFailureException
  • redis作为缓存使用时,建议捕获RedisConnectionFailureException异常,从而在redis崩掉的情况下能够直接访问数据库
  • 基于SpringCloud的Ribbon模块在微服务之间相互调用时,不经过zuul网关
  • MySQL主从高可用时,如果因为错误数据导致挂接失败,需要先取消挂接(stop slave),手动删除错误数据,再重新挂接(start slave)
  • MyCat1.5.1版本还不支持复杂SQL,比如update...select..., insert ...select...等
  • insert的时候加上列名是一个好习惯,因为MyCat1.5.1不支持省略列名的写法
  • 直接使用RedisTemplate模板类,键和值会出现类似\xac\xed\x00\x05t\x00的东西,此时要么不去手动查看redis输出,要么换用StringRedisTemplate
  • 用nginx也能做到外部调用内部api的拦截,只需要将提供给前端的api路径和提供给后端的api路径区分开。比如提供给前端的api路径是/manage/query,提供给后端的api是/backend/query,因为nginx拼接了"/manage",所以自然找不到/backend/query
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].