环境搭建与逆向工程
在进行谷粒商城分布式项目的开发时,环境搭建是至关重要的一步。一个稳定、高效的环境能够为后续的开发工作提供坚实的基础。本文将详细介绍谷粒商城分布式环境搭建的全过程,包括 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>
项目结构如下:
报错:
解决办法:将父级pom文件里面设置:
<packaging>pom</packaging>
数据库导入
创建五个数据库,再导入sql文件
逆向工程生成代码
导入开源项目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
前端安装依赖的时候会有很多报错,解决办法如下(M1 Pro芯片 ):要加sudo
使用nvm, node版本选择v12.22.12
1.先安装node-sass: sudo npm install node-sass@npm:sass --ignore-scripts
2.安装chromedriver的时候会报错
这时候先去下载链接中的这个chromedriver,
然后再安装,使用命令:后面的位置要改为自己的下载路径
sudo npm install chromedriver --chromedriver_filepath=/Users/houyunfei/Downloads/chromedriver_mac64.zip
最后再安装其他依赖:
sudo npm install
成功登录:
导入开源项目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>
修改代码生成器数据库信息为自己要生成的数据库:
修改下面几项信息:
访问localhost:
勾选所有表,然后生成代码,将生成的main文件夹复制到项目中,因为代码中有报错,缺少代码,所以还要进行下面的操作
创建gulimall-common
模块,再让其他模块添加这个依赖
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,可以先将逆向工程里的这个注释掉,然后重新生成代码
其他地方报错的,可以将renrenfast里面的代码复制过来,大概有如下几个:
导入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 时报错:
执行命令:
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>