《谷粒商城》开发实录:016-027 搭建后台管理系统

016-019 快速开发-使用人人开源搭建后台管理系统

使用gitee上的人人开源工程搭建一个后台管理系统。

我们主要用到renren-fast(后端)、renren-fast-vue(前端)和renren-generator(生成器)。

renren-fast

将renren-fast项目clone到本地的gulimall目录下。将其中的.git文件删掉。

使用IntelliJ IDEA打开renren-fast,并将它配置到gulimall的总pom.xml文件中。

初始化数据库:

  1. 使用SQLyog连上MySQL。创建数据库:gulimall_admin
  2. 在数据库gulimall_admin中执行SQL脚本:renren-fast/db/maysql.sql

数据库初始化完成。

配置数据源:

  1. 打开配置文件src/resources/application.yml,我们可以看到当前环境为dev环境。
  2. 打开同目录下的配置文件application-dev.yml,修改数据源信息。

数据源配置完成。

运行renren-fast:

  • 执行src/main/java/io/renren/RenrenApplication类中的main方法。

renren-fast-vue

将renren-fast-vue项目clone到本地的gulimall目录下。将其中的.git文件删掉。

使用VsCode打开renren-fast-vue项目。

导入依赖:

npm install

执行npm install时有报错,我最终解决了问题,不过不确定自己的哪些操作起了作用,请查阅评论区或百度解决。

 运行renren-fast-vue:

npm run dev

项目成功启动后,可使用浏览器访问该项目:http://localhost:8001

如果此时前后端项目都在运行,可以完成管理员登录操作(用户名、密码都是admin)。

 

renren-generator

将renren-generator项目clone到本地的gulimall目录下。将其中的.git文件删掉。

使用IntelliJ IDEA打开renren-generator,并将它配置到gulimall的总pom.xml文件中。

后边在使用renren-generator的时候会遇到一个缺少依赖包的问题,我们在这里解决了。

打开src/main/resources/template路径下的Controller.java.vm文件,将导入的RequiresPermissions类注释掉,然后注释掉下面所有涉及@RequiresPermissions注解的代码。

接下来,我们使用renren-generator生成各个微服务的增删改查代码。

(因为我们创建了5个微服务,所以下面的步骤一共要执行5次)

以gulimall-product服务为例:

1.配置数据源

 2.其他配置信息

3.整合spring和mybatis-plus

在src/main/resources/路径下创建文件application.yaml:(视频中在这里设置了主键自增,我是到后面做增删改查时才回过头来添加的)

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_pms
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml

4.运行renren-generator

执行src/main/java/io/renren/RenrenApplication类中的main方法。

运行成功后,访问http://localhost:80,进入renren-fast页面,选择所有表,点生成代码。

得到一个压缩文件,解压后得到一个main文件夹和若干sql文件。将main文件夹覆盖到gulimall-product/src/路径下。

此时,你会发现生成的代码中缺了很多类,之后生成其他微服务的代码也会缺很多类,我们不想挨个儿补充每个微服务中缺少的类,所以创建一个通用服务来提供这些缺少的类。

我们创建一个gulimall-common服务,将以后每个微服务都需要的东西放进去。

将它配置到gulimall的总pom.xml文件中。

然后在gulimall-common/pom.xml中添加依赖:

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.17</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
        <scope>compile</scope>
    </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.13</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.2.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.2.RELEASE</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>9.0.30</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

解决其他微服务导入renren-generator生成的代码后的类缺失问题。

  1. 在gulimall-product服务的pom.xml文件中添加对gulimall-common的依赖(之后的每个服务都需要添加):
    <dependency>
        <groupId>com.atguigu.gulimall</groupId>
        <artifactId>gulimall-common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  2. 在gulimall-common的src/main/java/路径下创建com.atguigu.common.utils包,将renren-fast/src/main/java/io/renren/common/utils/路径下的Constant、PageUtils、Query、R类复制到utils包内。
  3. 在gulimall-common的src/main/java/路径下创建io.renren.common包,将renren-fast/src/main/java/io/renren/common/路径下的xss包、exception包复制到common包内。
  4. 在io.renren.common包下创建utils包,将renren-fast/src/main/java/io/renren/common/utils/路径下的R.java文件复制到utils包内。

测试一下:

接下来回过头依次使用renren-generator生成其他服务的代码。

在测试gulimall-ware时可能会出现错误:找不到Longblob类。把Longblob改成byte[]即可。

给每个服务配置端口号:

gulimall-coupon服务:7000

gulimall-member服务:8000

gulimall-order服务:9000

gulimall-product服务:10000(后来因为端口号冲突改成了12000)

gulimall-ware服务:11000

终于搞定:

020 分布式组件-Spring Cloud Alibaba简介

Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。

参考文档

依托Spring Cloud Alibaba,只需要添加一些注解和少量的配置,就可以将Spring Cloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

根据Spring Boot版本选择Spring Cloud、Spring Cloud Alibaba的版本:

在gulimall-common服务的pom.xml文件中添加依赖: 

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

021 分布式组件-搭建Nacos注册中心

1.添加Nacos依赖

在gulimall-common服务的pom.xml文件中添加依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.下载Nacos Server

下载链接

Windows系统下载那个zip文件。

解压缩后,如果直接运行bin文件夹下的startup.cmd会启动失败,因为Nacos默认是以集群模式启动的。

我们使用比较偷懒的方法:修改startup.cmd文件:

再次运行startup.cmd,Nacos启动成功。

3.配置需要注册的服务

在每个服务(coupon、member、order、product、ware)的src/main/resources/application.properties文件中配置Nacos Server:

使用@EnableDiscoveryClient 注解开启服务的注册与发现功能:

重启各个服务。

4.查看服务

访问 http://127.0.0.1/8848/nacos

默认的用户名和密码都是nacos

登录成功后查看服务列表:

发现各服务已成功注册。

补充:

在往gitee上push代码时,我有些纠结是否应该把nacos也推上去,如果推的话,nacos本身就有100多兆的代码,这些代码跟项目的相关性并不大,但如果不推的话,在其他电脑上下载项目源码后,还得特意去下载nacos。

我问了身边的大佬,大佬建议我买一个云服务器,把nacos部署到服务器上,这样就不用往代码仓库里推nacos代码,以后也不用每次启动项目前都手动启动nacos了。等这个项目做得差不多了我就去氪云服务器。

022 分布式组件-测试Spring Cloud OpenFeign远程调用

1.添加openfeign依赖

在创建各个微服务时已经导入了openfeign依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.开启远程调用功能

我们创建一个feign包,以后将所有调用其他服务的接口都放在这个包下:

然后在GulimallMemberApplication.java中使用注解:

@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")

 这样在启动gulimall-member服务时,会扫描feign包(找到@FeignClient,接下来讲)。

 3.编写一个远程调用的接口

我们在gulimall-coupon中随便找一个Controller类,在里面写一个要被远程调用的方法: 

将这个要被调用的方法抽象化,添加到gulimall-member服务的feign 包的CouponFeignService.java中:

通过@FeignClient和@RequestMapping两个注解,可以连结分别位于两个服务中的抽象和实现。

4.测试远程调用

在gulimall-member中随便找一个Controller类,在里面中写一个test方法:

重启gulimall-coupon服务和gulimall-member服务。

在重启gulimall-member服务时报了一个错误:

No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

解决方法:修改gulimall-common的pom.xml文件:(从Nacos依赖中移除ribbon,并引入loadbalancer)

 再重启就成功了。

打开浏览器访问:

http://127.0.0.1:8000/member/member/coupons

经验证,远程调用成功:

023 分布式组件-Nacos配置中心

1.在gulimall-common服务的pom.xml文件中添加依赖

dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.0.3</version>
</dependency>

2.在每个服务中创建配置文件src/main/resources/bootstrap.properties

3.给每个服务在Nacos配置中心添加对应的配置集

(Nocos本地启动后访问http://127.0.0.1:8848/nacos/

Data ID为“应用名.properties”

4.在项目中动态地获取配置

这里要使用@RefreshScope和@Value两个注解:

@Value注解想要获得一个howareyou值,我们需要在项目中给它设一个默认值,否则服务启动会失败。

重启服务,点下方链接进行测试:

http://localhost:7000/coupon/coupon/test

这里的机制是:当配置中心运行正常且包含gulimall-coupon.properties这个配置集时,读取该配置集中的配置。当配置中心挂掉时,读取本地的默认值。

Namespace和Group

命名空间:用于进行租户粒度的配置隔离。默认为public。

我们可以新建几个命名空间:

 然后在配置列表页面会出现这些命名空间:

不同命名空间中的配置是相互隔离的(且可重复的),默认会使用public命名空间中的配置。 

如果想要使用其他命名空间的配置,可以在bootstrap.properties中配置:(我仍然打算使用public的配置,就注释掉了)

那一长串是:

组:使用起来跟命名空间差不多。默认所有配置集都属于DEFAULT_GROUP。

 

可以使用多配置集:

可以看到,对比namespace,使用group的一个优点是在bootstrap.properties中配置内容是可读的(test_group),在namespace和group结合使用的情境下,可以考虑把更可能发生变化的配置项设计为group。

之前有提到过不往gitee上推nacos代码,所以大部分配置仍然使用本地版本。

026 分布式组件-使用Gateway创建&测试API网关

1.创建模块gulimall-gateway

2.添加依赖

gulimall-gateway不再依赖gulimall-common。在pom.xml文件中添加对nacos的依赖:

<!-- Nacos:服务注册/发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
    <version>3.0.3</version>
</dependency>
<!-- Nacos:配置管理 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.0.3</version>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.开启网关服务的注册&发现

使用配置中心管理配置。

启动gulimall-gateway服务。

启动成功。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值