强烈推荐一个开源微电商项目luban-mall

**前言**

`luban-mall` 项目脱胎于开源电商项目`mall`,并在这一开源醒目的基础上由鲁班学院以**伯乐老师**为代表等进行了项目增强和完善。它是基于`SpringBoot+MyBatis`的电商系统,包括**前台商城系统**及**后台管理系统**

前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、代码生成设置等模块。将这一项目吃透,对于Java开发人员来说非常有助于掌握java技术栈中主流的技术框架,既能学习电商项目的架构技术,也能熟悉和掌握电商项目中的业务开发。

**1 电商分布式架构图**

                                  

   图 1 鲁班电商项目分布式架构图

**2 单体架构**

对于个人学习而言,最开始我们选择从单体架构开始。后面项目的业务模块多了和复杂起来之后,为了减少项目的耦合度才开始按照相互独立的业务模块拆分出微服务,走分布式系统架构路线。任何事情都应该从简单开始,本电商项目的起步学习阶段采用的是前后端分离的单体架构技术。

**2.1 工程介绍**


图 2 鲁班电商单体项目业务架构图

| 工程名 | 描述 |

| --- | --- |

|  mall-common  | 基础工程    |

|  mall-security  |  基础校验  |

|  mall-admin  |  商品后台管理系统,包括商品中心、活动管理和订单管理等  |

|  mall-core  |  电商系统业务核心系统,主要进行订单处理  |

|  mall-search  |    商品搜索 |

|  mb-generator  |    mybatis工具类 |

|  luban-admin-web  |  管理后台的web项目  |

| luban-front-web    |  电商前端web项目  |

**2.2 技术选型**

前后分离

**后端技术选型**

|  技术  |  说明  |  官网  |

| --- | --- | --- |

| Spring Boot    | 容器+MVC框架    | https://spring.io/projects/spring-boot    |

|  Spring Security  | 认证和授权框架    |  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  |

|  PageHelper  |  MyBatis物理分页插件  |  http://git.oschina.net/free/Mybatis_PageHelper  |

|  Swagger-UI  |  文档生成工具  |  https://github.com/swagger-api/swagger-ui  |

|  Elasticsearch  |  搜索引擎  |    https://github.com/elastic/elasticsearch |

|  RabbitMq  |  消息队列  | https://www.rabbitmq.com/    |

|  Redis  | 分布式缓存    |  https://redis.io/  |

|  MongoDb    |  文档型数据库 |  https://www.mongodb.com/              |

| zookeeper |  分布式锁  | https://zookeeper.apache.org/    |

|  Docker      |  应用容器引擎 | https://www.docker.com/    |

| Druid      |  数据库连接池 | https://github.com/alibaba/druid |

| OSS  |  对象存储  | https://github.com/aliyun/aliyun-oss-java-sdk                      |

| JWT      | JWT登录支持 |  https://github.com/jwtk/jjwt      |

| LogStash  | 日志收集  | https://github.com/logstash/logstash-logback-encoder |

| Lombok  | 简化对象封装工具 | https://github.com/rzwitserloot/lombok      |

| Seata | 全局事务管理框架 | https://github.com/seata/seata      |

| Portainer | Portainer| https://github.com/portainer/portainer  |

| canal  | 数据同步 | https://github.com/alibaba/canal|

**前端技术选型**

|  技术  | 说明    |  官网  |

| --- | --- | --- |

|  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/ |

**环境依赖**

|  工具  |  版本号  |  下载  |

| --- | --- | --- |

|  JDK  |  1.8  | https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html    |

|Mysql    | 5.7    | https://www.mysql.com/    |

| Redis    |  3.2  | https://redis.io/download    |

| Elasticsearch  | 6.2.2  | https://www.elastic.co/downloads    |

| MongoDb  | 3.2  | 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  |

**3 后端开发环境搭建**

关注笔者的微信公众号**码农进阶之路2020**,发送消息【luban-mall】可获得luban-mall项目的百度网盘下载地址。

- 下载 luban-mall工程,包含模块(mall-common,mall-security,mall-admin,mall-core,mall-search,mb-generator

- IDE导入luban-mall项目

图 3 Luban-mall 电商项目工程结构图

**3.1安装Mysql数据库并初始化数据**

- 安装myql,创建数据库,默认mall

mysql的安装可以参考这篇文章:MySQL 安装

如果需要在Linux服务器上安装Mysql5.7,请参考我的这篇文章:Linux系统云服务器上安装Mysql5.7数据库,解决不能远程访问的bug

```sql

#使用root账户登录命令行客户端(如Navicat或IDEA中的DataSource)后执行sql脚本创建mall数据库

create database mall;

#设置全局密码验证策略和长度限制,防止创建用户授予密码时报错

set global validate_password_policy=LOW;

set global validate_password_length=8;

#创建新的druid用户及登录密码

create user 'druid'@'%' IDENTIFIED BY 'druid705';

#查询root用户是否具备给其他用户授权的限制

use mysql;

SELECT host,user,Grant_priv,Super_priv FROM user where user='root';

#如果你以上查询结果Grant_priv字段的值为'N',则执行以下sql使root用户可以给其他用户授予操作权限

UPDATE user SET Grant_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

#授予druid用户对mall库下表的增删改查权限和创建和删除表、视图的一系列权限

GRANT CREATE,DROP,ALTER,INSERT,UPDATE,SELECT,DELETE on mall.* to 'druid'@'%' with grant OPTION;

```

- 创建好mall数据库和druid用户并使用root账户给其授权后就可以使用druid账户登录连接mysql的mall数据库,在客户端命令控制台中将项目根目录下的`document/sql/mall.sql`脚本拷贝进去并执行建表和插入数据了

**3.2 Redis安装**

读者可参考这篇文章安装缓存数据库Redis:Redis 安装 包含了windows系统和Linux系统下Redis的安装,Redis官网建议使用Linux系统下安装最新稳定版本redis,目前的稳定版本为`redis-6.0.8`。不过为了方便本地开发,我们可以在本地安装windows系统下的redis-3.2版本。上了测试和生产环境最好换成Linux系统下的Redis服务。

**3.3 ElasticSearch 安装**

读者可参考我的这篇文章:大数据分析利器ElasticSearch入门(一)  安装ES,不过笔者当时安装的版本是7.3.2版本,Linux和Windows系统下的安装内容都有,而且步骤非常详细,对于安装过程中出现bug进行了解决和规避。

**3.4 MongoDB 安装**

(1) Windows 系统下安装 MongoDB

读者可参考菜鸟教程的这篇文章在Windows系统下安装 MongoDB 文档数据库:

Windows 平台安装 MongoDB

(2) linux 系统下安装 MongoDB

读者可参考菜鸟教程的这篇文章在Linux系统下安装 MongoDB 文档数据库:

Linux平台安装MongoDB

**3.4 RabbitMQ 安装**

读者可参考笔者的这篇文章安装 RabbitMQ:快速入门高级消息中间件RabbitMQ  文中囊括了 Windows 平台和 Linux 平台下消息队列 RabbitMQ 的安装

**4 启动后台项目服务**

**4.1 启动 mall-admin 项目服务**

修改mall-admin项目中`src/main/resource/application.yml` 中的Mysql数据库连接配置信息

```yml

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8

    username: druid

    password: druid705

```

修改完成后运行 mall-admin 模块中`AdminApplication`启动类中的Main 方法启动mall-admin服务,端口号为8091

**4.2 启动 mall-core 项目服务**

在 mall-core 项目中的启动配置项中的 redis、mongodb 和 rabbitmq 服务器连接参数换成自己安装时配置的参数值

`application.yml`

```yml

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8

    username: druid

    password: druid705

    druid:

      initial-size: 5 #连接池初始化大小

      min-idle: 10 #最小空闲连接数

      max-active: 20 #最大连接数

      web-stat-filter:

        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据

      stat-view-servlet: #访问监控网页的登录用户名和密码

        login-username: druid

        login-password: druid

  data:

    mongodb:

      host: 134.175.187.61

      uri: mongodb://mongod:<password>@<host>:27017/test

  redis:

    host: 134.175.187.61 # Redis服务器地址

    database: 0 # Redis数据库索引(默认为0)

    port: 6379 # Redis服务器连接端口

    password:  # Redis服务器连接密码(默认为空)

    jedis:

      pool:

        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)

        max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制)

        max-idle: 8 # 连接池中的最大空闲连接

        min-idle: 0 # 连接池中的最小空闲连接

    timeout: 3000ms # 连接超时时间(毫秒)

  rabbitmq:

    host: localhost

    port: 5672

    virtual-host: /  #mall

    username: admin

    password: admin123

    publisher-confirms: true #如果对异步消息需要回调必须设置为true

```

注意: 上面的mongdb连接的和需要替换成你自己配置mongodb是创建的mongod用户密码和mongodb服务安装所在的服务器IP地址或着域名

依次次启动redis服务、mongodb服务和rabbitmq服务,然后运行启动类`CoreApplication.java`中的main方法,启动 `CoreApplication` 项目,服务端口为8081

**4.3 启动 mall-search 服务**

启动 elastic-search服务,并修改 `mall-search` 模块中的应用能启动配置文件`application.yml` 中关于 mysql 数据库和 elasticsearch 的客户端连接配置信息对应自己安装时的参数值

`application.yml`

```yml

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8

    username: druid

    password: druid705

    druid:

      initial-size: 5 #连接池初始化大小

      min-idle: 10 #最小空闲连接数

      max-active: 20 #最大连接数

      web-stat-filter:

        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据

      stat-view-servlet: #访问监控网页的登录用户名和密码

        login-username: druid

        login-password: druid

  data:

    elasticsearch:

      repositories:

        enabled: true

      cluster-nodes: localhost:9200

      cluster-name: elasticsearch

  elasticsearch:

    rest:

      uris: ["http://localhost:9200"]

```

然后再运行`SearchApplication`启动类中的main方法,在笔者的本地开发环境启动过程中报了加载 `elasticsearch` 节点失败的异常,但并不影响项目正常启动,服务端口为8500。异常信息如下:

```bash

2020-11-28 16:30:31.783 ERROR 24136 --- [          main] .d.e.r.s.AbstractElasticsearchRepository : failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available:

```

异常信息显示配置的 `elasticsearch` 节点不可用,这个问题后面有时间研究设计ES查询业务时再来解决。到时解决了笔者再专门发一篇关于ES的文章。

**5 启动后台管理前端项目服务**

关注笔者的微信公众号**码农进阶之路2020**,发送关键词信息【luban--web-admin】即可获得下载鲁班电商项目后台管理项目的前端代码克隆地址

前端项目基于Vue+Element实现。需要依赖 `nodejs`,所以需要提前下载安装`nodejs`。`nodejs` 下载地址: [nodejs安装包下载地址](https://nodejs.org/dist/v8.9.4/node-v8.9.4-x64.msi)

使用git将 `luban-web-admin`项目克隆至本地后使用 `VScode` 以打开文件夹的方式打开项目,在 `TERMINAL` 命令行控制台中执行 `npm install`命令完成项目依赖包的安装,如果按照过程中出现 `node-sass` 安装失败的问题,请参考这篇文章解决:node-sass 安装失败的各种坑

安装依赖模块成功后,执行 `npm run dev` 命令在本地启动前端项目服务。

项目启动成功后控制台显示服务运行在 `http://localhost:8090`

图 3  uban-web-admin项目启动成功信息


**6 电商后台管理项目效果体验**

前后端项目启动成功后,在谷歌浏览器中输入 ` http://localhost:8090`

会弹出登录对话框,输入 admin用户名,密码:admin1234,然后点击登录

后台用了`spring-security` 技术对用户的操作请求进行了认证和鉴权拦截。

图 4 电商后台管理项目登录对话框

登录成功后,就进入了电商后台管理系统的主页面

图 5 电商后台管理系统首页

luban-mall 微电商项目的环境搭建和本地服务启动准备内容就讲到这里,文章首发个人的微信公众号“码农的进阶之路2020",欢迎初次阅读笔者文章的读者朋友们加个关注,笔者会不定期推送技术干货文章,与读者粉丝们共同成长。

作者微信公众号二维码
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容