跳到主要内容

环境搭建与逆向工程

在进行谷粒商城分布式项目的开发时,环境搭建是至关重要的一步。一个稳定、高效的环境能够为后续的开发工作提供坚实的基础。本文将详细介绍谷粒商城分布式环境搭建的全过程,包括 Docker 安装 MySQL 和 Redis、项目创建、数据库导入以及逆向工程的导入等步骤。

环境搭建

Docker安装MySQL

拉取镜像image

docker pull mysql

创建实例container并启动

docker run -p 3307:3306 --name mysql \
-v ~/tools/docker-volumes/mysql/log:/var/log/mysql \
-v ~/tools/docker-volumes/mysql/data:/var/lib/mysql \
-v ~/tools/docker-volumes/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=12345678 \
-d mysql:latest

参数说明

  • -p 3307:3306: 将容器内部的3306端口映射到主机的3307端口,即将容器中的 MySQL 服务映射到主机上的3307端口。
  • --name mysql: 为容器指定一个名称,这里为 "mysql"。
  • -v ~/tools/docker-volumes/mysql/log:/var/log/mysql: 将主机上的 ~/tools/docker-volumes/mysql/log 目录挂载到容器内的 /var/log/mysql 目录,用于存储 MySQL 的日志文件。
  • -v ~/tools/docker-volumes/mysql/data:/var/lib/mysql: 将主机上的 ~/tools/docker-volumes/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录,用于存储 MySQL 的数据文件。
  • -v ~/tools/docker-volumes/mysql/conf:/etc/mysql: 将主机上的 ~/tools/docker-volumes/mysql/conf 目录挂载到容器内的 /etc/mysql 目录,用于存储 MySQL 的配置文件。
  • -e MYSQL_ROOT_PASSWORD=12345678: 设置 MySQL 的 root 用户密码为 "12345678"。
  • -d mysql:latest: 以后台模式运行最新版本的 MySQL 容器。

进入容器:

docker exec -it mysql /bin/bash

我的配置文件挂载到了~/tools/docker-volumes/mysql/conf文件夹下面,因此需要在这个文件夹下面创建一个my.cnf的配置文件

vim my.cnf

输入以下配置内容:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

接着重启mysql:

docker restart mysql

Docker 安装redis

拉取镜像image

docker pull redis

先提前创建一个redis.conf配置文件在~/tools/docker-volumes/redis/conf目录下面

运行redis容器:

docker run -p 6379:6379 --name redis -v ~/tools/docker-volumes/redis/data:/data \
-v ~/tools/docker-volumes/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

使用redis-cli

docker exec -it redis redis-cli

新版本已经默认可以数据持久化了

设置开机自启:

docker update redis --restart=always

项目初始化

父级maven用于聚合

    <groupId>com.cxk</groupId>
<artifactId>gulimall</artifactId>
<version>0.0.1</version>
<name>gulimall</name>
<description>聚合服务</description>

<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
</modules>

项目结构如下:

image-20240117091715337

报错:

image-20240116214151899

解决办法:将父级pom文件里面设置:

    <packaging>pom</packaging>

数据库导入

创建五个数据库,再导入sql文件

image-20240117094956485

逆向工程生成代码

导入开源项目renren-fast-vue:https://gitee.com/renrenio/renren-fast-vue

导入开源项目renren-fast:https://gitee.com/renrenio/renren-fast

父级maven加入renrnefast依赖:

    <modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
</modules>

创建数据库gulimall_admin并导入sql

image-20240117095723274

前端安装依赖的时候会有很多报错,解决办法如下(M1 Pro芯片):要加sudo

使用nvm, node版本选择v12.22.12

1.先安装node-sass: sudo npm install node-sass@npm:sass --ignore-scripts

2.安装chromedriver的时候会报错

image-20240117140259715

这时候先去下载链接中的这个chromedriver,

然后再安装,使用命令:后面的位置要改为自己的下载路径

sudo npm install chromedriver --chromedriver_filepath=/Users/houyunfei/Downloads/chromedriver_mac64.zip

最后再安装其他依赖: sudo npm install

成功登录:

image-20240117141256498

导入开源项目renren-generator:https://gitee.com/renrenio/renren-generator

加入父级maven

    <modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
<module>renren-generator</module>
</modules>

修改代码生成器数据库信息为自己要生成的数据库:

image-20240117145710759

修改下面几项信息:

image-20240117145631431

访问localhost:

image-20240117145739359

勾选所有表,然后生成代码,将生成的main文件夹复制到项目中,因为代码中有报错,缺少代码,所以还要进行下面的操作

创建gulimall-common模块,再让其他模块添加这个依赖

image-20240117151510079

common模块导入mybatisplus等依赖

        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>


<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>

<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.12</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons.lang.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>

暂时用不到RequiresPermissions,可以先将逆向工程里的这个注释掉,然后重新生成代码

image-20240117153456097

其他地方报错的,可以将renrenfast里面的代码复制过来,大概有如下几个:

image-20240117155046399

导入mybatis plus配置:

启动类加MapperScan

@SpringBootApplication
@MapperScan("com.cxk.gulimall.product.dao")
public class GulimallProductApplication {

public static void main(String[] args) {
SpringApplication.run(GulimallProductApplication.class, args);
}

}

配置文件:

spring:
datasource:
username: root
password: 12345678
url: jdbc:mysql://localhost:3307/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
mapper-locations: "classpath*:/mapper/**/*.xml" # mapper文件位置
global-config:
db-config:
id-type: auto # 自增

maven多模块聚合compile 时报错:

image-20240118223314691

执行命令:

mvn clean install -U

清理本地仓库并重新构建

写个测试类测试:

package com.cxk.product;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cxk.gulimall.product.GulimallProductApplication;
import com.cxk.gulimall.product.entity.BrandEntity;
import com.cxk.gulimall.product.service.BrandService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest(classes=GulimallProductApplication.class)
@RunWith(SpringRunner.class)
public class GulimallProductApplicationTests {

@Autowired
private BrandService brandService;

@Test
public void contextLoads() {
BrandEntity brandEntity = new BrandEntity();
brandEntity.setName("华为");
boolean save = brandService.save(brandEntity);
System.out.println("保存成功:" + save);

LambdaQueryWrapper<BrandEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BrandEntity::getBrandId, 6L);
List<BrandEntity> list = brandService.list(wrapper);
list.forEach(System.out::println);

}

@Test
public void test(){

}
}

接下来为其他服务也逆向生成代码:

优惠券系统coupon

修改配置generator.properties

mainPath=com.cxk
#\u5305\u540D
package=com.cxk.gulimall
moduleName=coupon
#\u4F5C\u8005
author=yunfei
#Email
email=hyf1844025705@gmail.com
#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00)
tablePrefix=sms_

以及mysql:

# mysql
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#MySQL配置
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 12345678

加入common模块依赖:

		<dependency>
<groupId>com.cxk</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>