mall4j-bbc项目的搭建.md 6.9 KB

mall4j-bbc:j代表java,java项目,这里面包含了小程序/uniapp/pc/后台vue连接需要的接口。

以下开发环境均为window的开发环境。

1.开发环境

以下版本是最低要求的!!! 提问问题前请注意开发环境!!请安装好对应的依赖。

工具 版本
jdk 17
mysql 8.0
redis 5.0+
ElasticSearch 7.xx
xxl-job 3.0.0

2.启动java

2.1 安装jdk + mysql + redis + maven + git + elasticSearch

如果不了解怎么安装jdk的,可以参考 菜鸟教程的java相关

如果不了解怎么安装mysql的,可以参考 菜鸟教程的mysql相关

如果不了解怎么安装maven的,可以参考 菜鸟教程的maven相关

如果对于redis的安装并不了解的,可以参考 菜鸟教程的redis相关

如果对于git的安装并不了解的,可以参考 菜鸟教程的git相关

如果对于elasticSearch的安装并不了解的,可以参考 ElasticSearch 安装

安装相对简单,网上也有很多教程,这里就不多讲述。安装完按需对redis进行配置,后启动redis服务即可。

使用git下载项目,账号需要问项目的采购人员。

git clone https://git.mall4j.com/bbc/mall4j-bbc.git

后台配置的端口需与redis服务端口保持一致。

2.2 导入数据库

2.2.1 导入数据库之前,先要修改数据库配置

修改配置文件my.cnf

[mysqld]
# 默认使用“mysql_native_password”插件认证
# 如果使用的是mysql 8.0 需要设置 mysql_native_password,不然有些工具连不上
default_authentication_plugin=mysql_native_password
# 关闭 only_full_group_by
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

修改完毕之后,重启mysql服务。

使用idea导入项目并启动

启动idea,右上角选择open,找到mall4j的文件夹

idea open

2.2.2 导入数据库

在项目中会有一个 db 文件夹 如图所示:

db文件夹

里面会有很多的数据库文件,按照0、1、2、3的顺序将0schema.sql1yami_bbc.sql2area.sql3xxl_job.sql 导入mysql中。

这边推荐使用一款名为 sqlyog的工具,使用navicat 有不可预知的后果(因为有客户反应从navicat导出的数据库,再从navicat无法导入...)

问:那其他的数据库文件是干嘛的?

答:是更新过了某个时间更新代码时,更新的sql补丁,总数据都在上面四个文件中,所以初始化的时候,只要将四个文件按顺序导入数据库即可。

2.2.3

修改各个端的application-dev.yml (对于无法找到文件的用户,推荐使用idea快捷键 ctrl + shift + n 进行文件搜索)更改数据库账号密码

2.2.4 xxl-job

我们目前使用的定时任务框架为 xxl-job

下载地址:

下载后使用idea打开,修改,xxl-job运行的端口、二级目录、数据库连接配置(连接xxl-job的数据库,3xxl_job.sql已经导入),修改platfrom端的application-dev.yml

idea open

idea open

2.3 安装Lombok插件

Lombok是一个在Java开发过程中为了简化冗余和样板式代码而出现的插件如getter setter。项目中使用了这个插件,您需要安装该插件以便于项目正常启动。

具体安装步骤可以参考:IntelliJ IDEA下的使用 Lombok

2.4 修改配置,启动项目

对于无法找到文件的用户,推荐使用idea快捷键 ctrl + shift + n 进行文件搜索

  • 启动redis,端口6379
  • 启动aof-redis,端口6389
  • 启动mysql
  • 启动xxl-job-admin 定时任务
  • 启动ElasticSearch
  • 启动WuKongIm,用于客服im连接,具体安装参考安装WuKongIm
  • 通过MultishopApplication启动项目商家端后台接口,ApiApplication 启动项目前端接口,PlatformApplication 启动项目平台端前端接口

2.5 redis容器 和 aof-redis容器的区别

redis: 商城数据、登录(token)缓存,该redis中的数据可以随时删除。

aof-redis: 持久化redis,存储商品sku库存、订单锁定记录、退款、秒杀等数据,数据不可删除,用于提高订单性能。

这里建议用两个redis:

  1. 持久化的aof,需要参考这个 linux环境(生产环境搭建)/mall4j-shop/redis/redis.conf 里面的 appendfsync always,否则aof redis是无意义的。

  2. 只做缓存的普通redis是不需要开启这个的,而且最好不要开启,毕竟会影响性能。做库存需要持久化的需要开启这个。也就是说普通的redis只要用默认的配置就行。

  3. 如果真的用不了两个redis,一定要用同一个redis,那么这个redis要开启aof,并且分开redis的数据库,比如一个放在0,一个放在10(为什么不用1,因为怕不记得0和1了),并且千万不要删掉这里的数据。

  4. 持久化的库存如论如何都有可能认为失误,或者极小概率会丢失,可以通过定时任务找回来。因为数据库存了出入库记录,通过出入库记录可以找回来。不过如果你们代码修改多了,不确定会不会影响定时任务,所以做aof是非常有必要的。

  5. 为什么要用将库存放在redis当中,因为下单的时候,提交订单会涉及很多表操作,会变成一个大事务,而库存是行锁,严重的时候对同一个商品(不是下单,同时购买同一个商品)可能每秒只能十几的并发,所以放在redis是有必要的。

订单号

如果测试环境、开发环境、生产环境用的都是同一套支付系统,那么会面临一个问题:

测试环境中的支付单号1,会与生产环境中的支付单号1重复。所以需要在不同的环境增加一个需要,比如加多个序号测试环境的1会变成11,开发环境的1会变成21

需要在application.yml 修改这个配置,请配置10-99。请手动在不同的环境加上不同的id

application:
   workerId: 21

关于跨域

关于跨域,目前已经在java后台实现了跨域的配置,修改CorsConfig 将里面*的域名改为自己需要的域名即可。

关于客服

部署WuKongIm,用于客服im连接,具体安装参考安装WuKongIm