mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

Overview

mall

公众号 交流 学习教程 SpringCloud版本 前端项目 码云

友情提示

  1. 快速体验项目在线访问地址
  2. 全套学习教程《mall学习教程》
  3. 微服务版本:基于Spring Cloud Hoxton & Alibaba的项目:mall-swarm
  4. 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》
  5. 项目交流:想要加群交流项目的朋友,可以加入mall项目交流群

前言

mall项目致力于打造一个完整的电商系统,采用现阶段流行技术实现。

项目文档

项目介绍

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

项目演示

后台管理系统

前端项目mall-admin-web地址:https://github.com/macrozheng/mall-admin-web

项目演示地址: http://www.macrozheng.com/admin/index.html

后台管理系统功能演示

前台商城系统

前端项目mall-app-web地址:敬请期待......

项目演示地址:http://www.macrozheng.com/app/mainpage.html

前台商城系统功能演示

组织结构

mall
├── mall-common -- 工具类及通用代码
├── mall-mbg -- MyBatisGenerator生成的数据库操作代码
├── mall-security -- SpringSecurity封装公用模块
├── mall-admin -- 后台商城管理系统接口
├── mall-search -- 基于Elasticsearch的商品搜索系统
├── mall-portal -- 前台商城系统接口
└── mall-demo -- 框架搭建时的测试代码

技术选型

后端技术

技术 说明 官网
SpringBoot 容器+MVC框架 https://spring.io/projects/spring-boot
SpringSecurity 认证和授权框架 https://spring.io/projects/spring-security
MyBatis ORM框架 http://www.mybatis.org/mybatis-3/zh/index.html
MyBatisGenerator 数据层代码生成 http://www.mybatis.org/generator/index.html
Elasticsearch 搜索引擎 https://github.com/elastic/elasticsearch
RabbitMQ 消息队列 https://www.rabbitmq.com/
Redis 分布式缓存 https://redis.io/
MongoDB NoSql数据库 https://www.mongodb.com
LogStash 日志收集工具 https://github.com/elastic/logstash
Kibina 日志可视化查看工具 https://github.com/elastic/kibana
Nginx 静态资源服务器 https://www.nginx.com/
Docker 应用容器引擎 https://www.docker.com
Jenkins 自动化部署工具 https://github.com/jenkinsci/jenkins
Druid 数据库连接池 https://github.com/alibaba/druid
OSS 对象存储 https://github.com/aliyun/aliyun-oss-java-sdk
MinIO 对象存储 https://github.com/minio/minio
JWT JWT登录支持 https://github.com/jwtk/jjwt
Lombok 简化对象封装工具 https://github.com/rzwitserloot/lombok
Hutool Java工具类库 https://github.com/looly/hutool
PageHelper MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper
Swagger-UI 文档生成工具 https://github.com/swagger-api/swagger-ui
Hibernator-Validator 验证框架 http://hibernate.org/validator

前端技术

技术 说明 官网
Vue 前端框架 https://vuejs.org/
Vue-router 路由框架 https://router.vuejs.org/
Vuex 全局状态管理框架 https://vuex.vuejs.org/
Element 前端UI框架 https://element.eleme.io
Axios 前端HTTP框架 https://github.com/axios/axios
v-charts 基于Echarts的图表框架 https://v-charts.js.org/
Js-cookie cookie管理工具 https://github.com/js-cookie/js-cookie
nprogress 进度条控件 https://github.com/rstacruz/nprogress

架构图

系统架构图

系统架构图

业务架构图

系统架构图

模块介绍

后台管理系统 mall-admin
前台商城系统 mall-portal

功能结构图-前台.jpg

开发进度

项目开发进度图

环境搭建

开发工具

工具 说明 官网
IDEA 开发IDE https://www.jetbrains.com/idea/download
RedisDesktop redis客户端连接工具 https://github.com/qishibo/AnotherRedisDesktopManager
Robomongo mongo客户端连接工具 https://robomongo.org/download
SwitchHosts 本地host管理 https://oldj.github.io/SwitchHosts/
X-shell Linux远程连接工具 http://www.netsarang.com/download/software.html
Navicat 数据库连接工具 http://www.formysql.com/xiazai.html
PowerDesigner 数据库设计工具 http://powerdesigner.de/
Axure 原型设计工具 https://www.axure.com/
MindMaster 思维导图设计工具 http://www.edrawsoft.cn/mindmaster
ScreenToGif gif录制工具 https://www.screentogif.com/
ProcessOn 流程图绘制工具 https://www.processon.com/
PicPick 图片处理工具 https://picpick.app/zh/
Snipaste 屏幕截图工具 https://www.snipaste.com/
Postman API接口调试工具 https://www.postman.com/
Typora Markdown编辑器 https://typora.io/

开发环境

工具 版本号 下载
JDK 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Mysql 5.7 https://www.mysql.com/
Redis 5.0 https://redis.io/download
MongoDB 4.2.5 https://www.mongodb.com/download-center
RabbitMQ 3.7.14 http://www.rabbitmq.com/download.html
Nginx 1.10 http://nginx.org/en/download.html
Elasticsearch 7.6.2 https://www.elastic.co/downloads/elasticsearch
Logstash 7.6.2 https://www.elastic.co/cn/downloads/logstash
Kibana 7.6.2 https://www.elastic.co/cn/downloads/kibana

搭建步骤

Windows环境部署

Docker环境部署

相关环境部署

公众号

学习不走弯路,关注公众号「macrozheng」,回复「学习路线」,获取mall项目专属学习路线!

加微信群交流,公众号后台回复「加群」即可。

公众号图片

许可证

Apache License 2.0

Copyright (c) 2018-2021 macrozheng

Comments
  • 刚刚开始学习本项目,单表的查询通过mbg生成,多表的查询怎么自动生成?

    刚刚开始学习本项目,单表的查询通过mbg生成,多表的查询怎么自动生成?

    我注意到,mbg项目中将所有表的基本单表查询和更新通过mybatis generator工具实现了自动生成

    除此之外,我还发现在admin项目中,src/main/resources/dao目录下还有一些手写的SQL,这些SQL对应的Java Dao和Dto类也是通过自动化工具自动生成的吗?

    如果是,自动化生成的相关配置是否在项目中有所体现?

    谢谢!

    opened by lk101 8
  • FK constraint

    FK constraint

    在阅读这里的时候http://www.macrozheng.com/#/database/mall_database_overview, 结构图里是有画Foreign Key的,但是使用这里的script: https://github.com/macrozheng/mall/blob/master/document/sql/mall.sql 所创建的数据库里并没有任何的FK,这个是什么原因呢?

    opened by xied75 5
  • mall.sql  注释错别字

    mall.sql 注释错别字

    CREATE TABLE sms_coupon ( id bigint(20) NOT NULL AUTO_INCREMENT, type int(1) DEFAULT NULL COMMENT '优惠卷类型;0->全场赠券;1->会员赠券;2->购物赠券;3->注册赠券',。。。

    应为 优惠券

    opened by himcs 5
  • 启动MallSearchApplication报错信息

    启动MallSearchApplication报错信息

    报错信息:org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{RV_qokY1Qm67WSCHRugQyw}{127.0.0.1}{127.0.0.1:9300}] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:349) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:247) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:60) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:381) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:407) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:396) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.support.AbstractClient$ClusterAdmin.execute(AbstractClient.java:708) ~[elasticsearch-6.4.3.jar:6.4.3] at org.elasticsearch.client.support.AbstractClient$ClusterAdmin.health(AbstractClient.java:730) ~[elasticsearch-6.4.3.jar:6.4.3] at org.springframework.boot.actuate.elasticsearch.ElasticsearchHealthIndicator.doHealthCheck(ElasticsearchHealthIndicator.java:79) ~[spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:84) ~[spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.health.CompositeHealthIndicator.health(CompositeHealthIndicator.java:98) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.health.HealthEndpoint.health(HealthEndpoint.java:50) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201] at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:246) [spring-core-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.boot.actuate.endpoint.invoke.reflect.ReflectiveOperationInvoker.invoke(ReflectiveOperationInvoker.java:76) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.endpoint.annotation.AbstractDiscoveredOperation.invoke(AbstractDiscoveredOperation.java:61) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:126) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.actuate.endpoint.jmx.EndpointMBean.invoke(EndpointMBean.java:99) [spring-boot-actuator-2.1.3.RELEASE.jar:2.1.3.RELEASE] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) [na:1.8.0_201] at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) [na:1.8.0_201] at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) [na:1.8.0_201] at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) [na:1.8.0_201] at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) [na:1.8.0_201] at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) [na:1.8.0_201] at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) [na:1.8.0_201] at sun.reflect.GeneratedMethodAccessor76.invoke(Unknown Source) ~[na:na] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) [na:1.8.0_201] at sun.rmi.transport.Transport$1.run(Transport.java:200) [na:1.8.0_201] at sun.rmi.transport.Transport$1.run(Transport.java:197) [na:1.8.0_201] at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_201] at sun.rmi.transport.Transport.serviceCall(Transport.java:196) [na:1.8.0_201] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) [na:1.8.0_201] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) [na:1.8.0_201] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) [na:1.8.0_201] at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_201] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) [na:1.8.0_201] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_201] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_201] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_201] elasticsearch版本:7.3.0

    opened by yy755964539 5
  • Whitelabel Error Page, This application has no explicit mapping for /error

    Whitelabel Error Page, This application has no explicit mapping for /error

    本地安装mysql,创建root账号密码,并代码clone到本地,idea编译后,启动mall-admin main方法报错如下: `Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Sun May 26 16:37:00 CST 2019 There was an unexpected error (type=Not Found, status=404). No message available` 参考 解决This application has no explicit mapping for /error, so you are seeing this 错误后仍然报错,博主能帮忙分析下什么原因吗?

    opened by le773 5
  • 启动mall-portal报错,好像是rabbitmq连接不上,访问127.0.0.1:15672是可以的

    启动mall-portal报错,好像是rabbitmq连接不上,访问127.0.0.1:15672是可以的

    2019-04-18 17:51:40.491 WARN 4668 --- [cTaskExecutor-1] o.s.a.r.listener.BlockingQueueConsumer : Failed to declare queue: mall.order.cancel 2019-04-18 17:51:40.496 WARN 4668 --- [cTaskExecutor-1] o.s.a.r.listener.BlockingQueueConsumer : Queue declaration failed; retries left=3

    org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[mall.order.cancel] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:710) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.passiveDeclarations(BlockingQueueConsumer.java:594) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:581) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1196) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1041) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at java.lang.Thread.run(Unknown Source) [na:1.8.0_161] Caused by: java.io.IOException: null at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:122) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:144) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:1006) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:52) ~[amqp-client-5.4.3.jar:5.4.3] at org.springframework.amqp.rabbit.connection.PublisherCallbackChannelImpl.queueDeclarePassive(PublisherCallbackChannelImpl.java:362) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_161] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_161] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_161] at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1110) ~[spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] at com.sun.proxy.$Proxy153.queueDeclarePassive(Unknown Source) ~[na:na] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:689) [spring-rabbit-2.1.4.RELEASE.jar:2.1.4.RELEASE] ... 5 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'mall.order.cancel' in vhost '/mall', class-id=50, method-id=10) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:494) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:288) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:138) ~[amqp-client-5.4.3.jar:5.4.3] ... 15 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'mall.order.cancel' in vhost '/mall', class-id=50, method-id=10) at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:516) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:670) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48) ~[amqp-client-5.4.3.jar:5.4.3] at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:597) ~[amqp-client-5.4.3.jar:5.4.3] ... 1 common frames omitted

    opened by shikuaiqian 5
  • 项目采用mybatis-plus是个败笔

    项目采用mybatis-plus是个败笔

    项目中的分页采用mybatis-plus分页,针对复杂查询条件,且查询条件和数据列大部分都不一致时,这个框架会输出很多非必要数据,如果项目再引入mybatisHelper分页插件,两个分页插件会冲突,而且作者项目中使用的是plus,而在文档中写的是helper来做引导,很明显根本自己没有尝试同时引入两个分页插件

    opened by zhang145926 4
  • 小问题,为什么没使用Lombok?

    小问题,为什么没使用Lombok?

    类似这样的 link,只需要这样如下不就好了:

    @Data
    public class UmsRole implements Serializable {
        private Long id;
    
        @ApiModelProperty(value = "名称")
        private String name;
    
        @ApiModelProperty(value = "描述")
        private String description;
    
        @ApiModelProperty(value = "后台用户数量")
        private Integer adminCount;
    
        @ApiModelProperty(value = "创建时间")
        private Date createTime;
    
        @ApiModelProperty(value = "启用状态:0->禁用;1->启用")
        private Integer status;
    
        private Integer sort;
    
        private static final long serialVersionUID = 1L;
    }
    
    opened by daidai21 4
  • 菜鸟求助:java:8镜像已失效,package出错

    菜鸟求助:java:8镜像已失效,package出错

    java:8镜像已失效,package出错{"message":"manifest for java:8 not found: manifest unknown: manifest unknown"} (Not Found: 404),能否直接使用openjdk的8镜像? 谢谢大佬!:)

    opened by kanesp 2
  • mall-portal接口/home/content返回的秒杀时间有误

    mall-portal接口/home/content返回的秒杀时间有误

    我在测试请求http://localhost:8085/home/content接口的时候,返回的homeFlashPromotion是这样的:

    {
      "startTime": "1970-01-01T08:00:00.000+00:00",
      "endTime": "1970-01-01T09:00:00.000+00:00",
      "nextStartTime": "1970-01-01T10:00:00.000+00:00",
      "nextEndTime": "1970-01-01T11:00:00.000+00:00",
      ....
    }
    

    ,我是按照你的教程用docker部署的,查看了docker的容器日志显示的是这样的:

    {
      "method":"GET",
      "ip":"127.0.0.1",
      "description":"根据活动名称分页查询",
      "uri":"/flash/list",
      "url":"http://localhost:8085/flash/list",
      "result":{
      "code":200,
      "data":{
      "totalPage":1,
      "pageSize":5,
      "list":[
            {
              "endDate":1647360000000, //==> new Date(1647360000000) = Wed Mar 16 2022 00:00:00 GMT+0800 (中國標準時間)
              "title":"2022换季秒杀",
              "createTime":1647329507000,  //==> new Date(1647329507000) = Tue Mar 15 2022 15:31:47 GMT+0800 (中國標準時間)
              "id":14,
              "startDate":1647273600000, //==> new Date(1647273600000) = Tue Mar 15 2022 00:00:00 GMT+0800 (中國標準時間)
              "status":1
            }
          ],
          "pageNum":1,
          "total":1
        },
        "message":"操作成功"
        },
        "basePath":"http://localhost:8085",
        "parameter":[
            {
            "pageSize":5
            },
            {
            "pageNum":1
            }
        ],
      "startTime":1647330876502, //==> new Date(1647330876502) = Tue Mar 15 2022 15:54:36 GMT+0800 (中國標準時間)
      "username":"admin",
      "spendTime":3
    }
    

    在数据库中是这样的:

    | id | title | start_date | end_date | status | create_time | | ---- | ------------ | ---------- | ---------- | ------ | ------------------- | | 14 | 2022换季秒杀 | 2022-03-15 | 2022-03-16 | 1 | 2022-03-15 15:31:47 |

    容器启动脚本是按照你教程上写的:

    docker run -p 8085:8085 --name ${app_name} \
    --link mysql:db \
    --link redis:redis \
    --link mongo:mongo \
    --link rabbitmq:rabbit \
    -e TZ="Asia/Shanghai" \
    -v /etc/localtime:/etc/localtime \
    -v /mydata/app/${app_name}/logs:/var/logs \
    -d mall/${app_name}:1.0-SNAPSHOT
    

    不知道是不是我在其他地方配置有误,还请大佬抽空帮忙看看,不胜感激

    opened by yuki0320 0
  • 锁定下单商品的所有库存

    锁定下单商品的所有库存

    /** * 锁定下单商品的所有库存 */ private void lockStock(List<CartPromotionItem> cartPromotionItemList) { for (CartPromotionItem cartPromotionItem : cartPromotionItemList) { PmsSkuStock skuStock = skuStockMapper.selectByPrimaryKey(cartPromotionItem.getProductSkuId()); skuStock.setLockStock(skuStock.getLockStock() + cartPromotionItem.getQuantity()); skuStockMapper.updateByPrimaryKeySelective(skuStock); } } 并发下单时 可能导致锁定库存数量小于预期值 (两个线程同时读取到某个sku的库存 第二次save覆盖第一次)

    opened by lurenha 1
Releases(v1.0.2)
Owner
macro
Justice may be late, but will never be absent.
macro
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容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch

咕泡商城- 微服务架构实战 咕泡商城是咕泡学院 Java架构课程中,帮助学员对于技术更好落地的一个实战项目,项目基于springboot2.1.6.RELEASE+Dubbo2.7.3 来构建微服务。 业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本

Mic 4.5k Dec 26, 2022
:racehorse:基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

系统介绍 本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime Text3 + Git + Chrome 压测

FINN 2.3k Dec 27, 2022
一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量。基于springboot +mybatis+spring security+vue 技术栈

YOMA [toc] 一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量,平台代码100%开源。平台适用于企业信息化、政务、中小型互联网等项目 平台采用前后端分离架构,基于如下流行的开源框架,易上手+便于后期维护 后端:https://

Shihao Ma 149 Dec 9, 2022
基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

平台简介 芋道,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。 前端采用 vue-element-admin。 后端采用 Spring Boot、MySQL、Redis。 权限认证使用 Spring Security

芋道源码 8.2k Jan 1, 2023
😎基于SpringBoot+MyBatis进行前后端开发的个人博客网站,优化了许多功能模块,版本不断维护中。(期末项目/毕业设计/新手推荐)

Spring-Blog 框架:Springboot 数据库持久层:Mybatis 文章评论插件:Valine 分页插件:PageHelper 后台UI框架:X-admin框架,即LayUI框架 数据库连接池:hikari 数据库:MySQL 日志:Log4J 后台配置: properties 缓存实

coder_ryan 142 Jan 5, 2023
w-blog后端部分,基于springboot、mybatis、mysq···的一个简单博客后端程序

w-blog 描述 一个后端使用Spring Boot 2.x、前台使用nuxtJs、后台使用vue的个人博客 简介 链接 Gitee链接: api: https://gitee.com/windsnowli/w-blog-api 前台: https://gitee.com/windsnowli/v

null 13 Jun 1, 2022
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容器化部署。

mall学习教程 简介 mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5

macro 11.7k Jan 8, 2023
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch

咕泡商城- 微服务架构实战 咕泡商城是咕泡学院 Java架构课程中,帮助学员对于技术更好落地的一个实战项目,项目基于springboot2.1.6.RELEASE+Dubbo2.7.3 来构建微服务。 业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本

Mic 4.5k Dec 26, 2022
:racehorse:基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

系统介绍 本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime Text3 + Git + Chrome 压测

FINN 2.3k Dec 27, 2022
一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量。基于springboot +mybatis+spring security+vue 技术栈

YOMA [toc] 一个小而美的低代码全栈开发平台,一键生成后端api接口+前端页面代码+在线接口文档,节省50%的前后端开发的工作量,平台代码100%开源。平台适用于企业信息化、政务、中小型互联网等项目 平台采用前后端分离架构,基于如下流行的开源框架,易上手+便于后期维护 后端:https://

Shihao Ma 149 Dec 9, 2022
基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

平台简介 芋道,一套全部开源的企业级的快速开发平台,毫无保留给个人及企业免费使用。 有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。 前端采用 vue-element-admin。 后端采用 Spring Boot、MySQL、Redis。 权限认证使用 Spring Security

芋道源码 8.2k Jan 1, 2023
😎基于SpringBoot+MyBatis进行前后端开发的个人博客网站,优化了许多功能模块,版本不断维护中。(期末项目/毕业设计/新手推荐)

Spring-Blog 框架:Springboot 数据库持久层:Mybatis 文章评论插件:Valine 分页插件:PageHelper 后台UI框架:X-admin框架,即LayUI框架 数据库连接池:hikari 数据库:MySQL 日志:Log4J 后台配置: properties 缓存实

coder_ryan 142 Jan 5, 2023
素材分享网:基于SpringBoot+MyBatis+阿里云OSS实现,适合于初学者。优秀毕业设计,喜欢的小伙伴可以点上面的⭐支持一下嘛!

素材分享网 这是一个多用户的资源共享平台,是一个专为文件共享而设计的新概念网盘系统。这是一个综合性非常强、灵活度非常高的素材网站,注册成为用户之后可以上传自己所喜欢的素材供他人浏览和高速下载。 同时设立网站管理员来审核用户上传的素材以及创建不同的素材分类来方便用户去上传、搜索,以此来为素材来设立分区

莫提 19 Nov 16, 2022
w-blog后端部分,基于springboot、mybatis、mysq···的一个简单博客后端程序

w-blog 描述 一个后端使用Spring Boot 2.x、前台使用nuxtJs、后台使用vue的个人博客 简介 链接 Gitee链接: api: https://gitee.com/windsnowli/w-blog-api 前台: https://gitee.com/windsnowli/v

null 13 Jun 1, 2022