> 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相关](https://www.runoob.com/java/java-environment-setup.html) 如果不了解怎么安装mysql的,可以参考 [菜鸟教程的mysql相关](https://www.runoob.com/mysql/mysql-install.html) 如果不了解怎么安装maven的,可以参考 [菜鸟教程的maven相关]( https://www.runoob.com/maven/maven-setup.html ) 如果对于redis的安装并不了解的,可以参考 [菜鸟教程的redis相关](https://www.runoob.com/redis/redis-install.html) 如果对于git的安装并不了解的,可以参考 [菜鸟教程的git相关](https://www.runoob.com/git/git-install-setup.html) 如果对于elasticSearch的安装并不了解的,可以参考 [ElasticSearch 安装](../linux环境(生产环境搭建)/ElasticSearch安装.md) 安装相对简单,网上也有很多教程,这里就不多讲述。安装完按需对redis进行配置,后启动redis服务即可。 使用git下载项目,账号需要问项目的采购人员。 ```bash git clone https://git.mall4j.com/bbc/mall4j-bbc.git ``` > 后台配置的端口需与redis服务端口保持一致。 ### 2.2 导入数据库 #### 2.2.1 导入数据库之前,先要修改数据库配置 修改配置文件my.cnf ```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](../img/开发环境搭建/idea open.png) #### 2.2.2 导入数据库 在项目中会有一个 `db` 文件夹 如图所示: ![db文件夹](../img/开发环境搭建/db文件夹.png) 里面会有很多的数据库文件,按照0、1、2、3的顺序将`0schema.sql`、`1yami_bbc.sql`、`2area.sql`、`3xxl_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` 下载地址: - gitee: https://gitee.com/xuxueli0323/xxl-job - github: https://github.com/xuxueli/xxl-job/releases/tag/3.0.0 下载后使用idea打开,修改,xxl-job运行的端口、二级目录、数据库连接配置(连接xxl-job的数据库,`3xxl_job.sql`已经导入),修改`platfrom`端的`application-dev.yml` ![idea open](../img/开发环境搭建/mall4j-xxl-job.png) ![idea open](../img/开发环境搭建/xxl-job.png) #### 2.3 安装Lombok插件 **Lombok**是一个在Java开发过程中为了简化冗余和样板式代码而出现的插件如`getter` `setter`。项目中使用了这个插件,您需要安装该插件以便于项目正常启动。 具体安装步骤可以参考:[IntelliJ IDEA下的使用 Lombok](https://www.jianshu.com/p/37e24fe833d6) #### 2.4 修改配置,启动项目 > 对于无法找到文件的用户,推荐使用idea快捷键 ctrl + shift + n 进行文件搜索 - 启动redis,端口6379 - 启动aof-redis,端口6389 - 启动mysql - 启动`xxl-job-admin` 定时任务 - 启动ElasticSearch - 启动WuKongIm,用于客服im连接,具体安装参考[安装WuKongIm](../linux环境(生产环境搭建)/安装WuKongIm.md) - 通过`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 ```yaml application: workerId: 21 ``` ### 关于跨域 关于跨域,目前已经在java后台实现了跨域的配置,修改`CorsConfig` 将里面`*`的域名改为自己需要的域名即可。 ### 关于客服 部署WuKongIm,用于客服im连接,具体安装参考[安装WuKongIm](../linux环境(生产环境搭建)/安装WuKongIm.md)