开头老规矩,手动推荐一波了,欢迎大家关注我的公众号“风云编程录”,感谢大家🙏。
上一篇文章我们完成了开发环境的基本配置,本篇博客接着完成后续的一些配置。
1. 修改docker镜像为docker重启后,自动重启
修改docker中的mysql以及redis镜像为docker重启后,自动重启
docker update mysql --restart=always
docker update redis --restart=always
设置完成后,虚拟机重启后,mysql以及redis也会自动重启
2. 使用开源的脚手架框架完成后台管理功能的搭建
使用开源脚手架renren搭建前端以及后端项目
后台项目 renren-fast:
前台项目 renren-fast-vue:
renren-fast-vue: renren-fast-vue基于vue、element-ui构建开发,实现renren-fast后台管理前端功能,提供一套更优的前端解决方案。
(1)我们将renren-fast 以及 renren-fast-vue两个开源项目下载到本地
GodShadow@bogon code % git clone git@gitee.com:renrenio/renren-fast-vue.git
Cloning into 'renren-fast-vue'...
remote: Enumerating objects: 2208, done.
remote: Counting objects: 100% (2208/2208), done.
remote: Compressing objects: 100% (964/964), done.
remote: Total 2208 (delta 1138), reused 2189 (delta 1130), pack-reused 0
Receiving objects: 100% (2208/2208), 9.29 MiB | 348.00 KiB/s, done.
Resolving deltas: 100% (1138/1138), done.
GodShadow@bogon code % git clone git@gitee.com:renrenio/renren-fast.git
Cloning into 'renren-fast'...
The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 1898, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 1898 (delta 0), reused 5 (delta 0), pack-reused 1881
Receiving objects: 100% (1898/1898), 2.83 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (911/911), done.
(2)将renren-fast项目中的 .git文件删除,将renren-fast整个项目拷贝到我们的gulimall中
(3)将renren-fast加入到我们的项目中去
<modules>
<module>gulimall-product</module>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
</modules>
(4)为了配合renren-fast模块的运行,我们将renren-fast需要的sql脚本执行起来。
新增一个db数据库 gulimall_admin,然后将所有的sql执行一下
(5)修改renren-fast的配置文件
将application-dev.xml的配置文件中数据源的配置改成我们自己的
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.56.100:3306/gulimall_admin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
然后我们就可以启动renren-fast项目了,这个属于一个管理系统的后台项目,我们可以通过localhost:8080/renren-fast 进行访问,访问界面如下:
3. 启动renren-fast-vue项目作为前端
(1)直接将renren-fast-vue项目拖到vscode中
(2)下面我们安装前段开发所需要的工具,首先是node
查看nodejs的版本
GodShadow@bogon ~ % node -v
v18.12.1
配置npm的镜像加速工具
GodShadow@bogon ~ % npm config set registry http://registry.npm.taobao.org/
然后在vscode中执行npm install下载前端需要依赖的包文件;
项目中的package.json文件记录了项目依赖的包文件;
下载完成后的依赖都会在node_modules中显示
我看了一下网上的资料,install的时候报了一堆错误,我也是按照视频中的要求换了一下node的版本,然后还是报了一堆错误,但是能启动了。
GodShadow@bogon _logs % node -v
v10.16.3
GodShadow@bogon _logs % npm config set registry http://registry.npm.taobao.org/
renren-fast-vue 运行npm install之后出现了好多错误,反正我是一个也没解决的了。然后直接执行npm run dev
反正前端项目直接启动了,懵逼中
4. 前后端联调
后端项目
http://localhost:8080/renren-fast
前端项目
前端项目默认账号 admin admin
调试成功后如下:
5. 使用renren-generator代码生成器生成product模块代码
添加renren-generator 脚手架,方便生成对应的mybatis相关的类 mapper以及对应sql
同样的操作,将 .git文件夹删掉,然后将整个renren-generator拷贝到我们的项目中去
同样的将这个模块添加进入我们的模块中
然后修改renren-generator 模块的配置
application.yml配置修改如下:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
#MySQL配置
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.56.100:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
generator.properties 配置文件对应产品服务的修改如下:
mainPath=com.whq
package=com.whq.gulimall
moduleName=product
author=cloudwindback
email=giteeforwhq@163.com
tablePrefix=pms_
修改完成后,直接启动工程,可以看到代码生成器的访问页面是
localhost的80端口
然后,我们全选所有的表格,生成对应代码
代码结构如下:
然后将main文件夹替换我们项目中的产品模块中的main目录
其中resource目录如下:
其中src下面是生成的前端vue代码,我们这边不需要,直接删除
6. 创建公共模块gulimall_common
我们看到生成的代码中有报错,为了解决这些报错,我们创建一个gulimall_common的模块,用于支持这些公共部分
(1)然后我们在product模块中添加我们的common模块
<dependency>
<groupId>com.whq.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(2)在gulimall-common模块的pom文件中添加如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>gulimall</artifactId>
<groupId>com.whq.gulimall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gulimall-common</artifactId>
<description>每一个微服务公共的依赖,bean,工具类等</description>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<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>2.6</version>
</dependency>
</dependencies>
</project>
(3)解决问题
将这两部分依赖倒入之后,可以解决很多问题了,然后我们将部分renren-fast项目中已经有的公共代码倒入到common模块中。
比如在service中存在如下的错误
import com.whq.common.utils.PageUtils;
import com.whq.common.utils.Query;
我们将renren-fast中的这些文件放到common模块中去
后面就是一个反复的修改代码的过程,需要调整脚手架生成的不适合的代码
其中一个比较重要的是,由于我们此次项目使用spring security作为权限管理,但是renren-fast使用的是shiro,我们需要修改一下脚手架工程生产的模版文件,将shiro的注解先去掉。
@RequestMapping("/list")
@RequiresPermissions("product:attrattrgrouprelation:list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = attrAttrgroupRelationService.queryPage(params);
return R.ok().put("page", page);
}
将renren-generator中的resource/template下的Controller.java.vm文件的@RequiresPermissions("${moduleName}:${pathName}:delete")这个注解注释掉
@RequestMapping("/list")
//@RequiresPermissions("${moduleName}:${pathName}:list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = ${classname}Service.queryPage(params);
return R.ok().put("page", page);
}
然后我们重启代码生成器项目,生成新的代码,然后将Controller的代码替换掉,这样的话,我们重新生成的代码中就不不包含这个注解了。
至此,我们的项目已经比较有模有样了,下一篇我们就开始基于生成的代码进行前后端联调。