谷粒商城-基础篇(详细流程梳理+代码)(上)

举报
长路 发表于 2022/11/28 20:30:53 2022/11/28
【摘要】 目前博主正在学习谷粒商城项目中,正在不断更新中…博客目录索引(持续更新)在一般的电商平台上就包含有三级分类:核心字段:parent_cid(父类id)、sort(排序字段)我们的多级分类是根据父类id来进行划分的,一级分类就是为0,对应二级分类的parent_id就是0,同理三级分类的parent_id就是1。

@[toc]

前言

目前博主正在学习谷粒商城项目中,正在不断更新中…

所有博客文件目录索引:博客目录索引(持续更新)

一、项目环境搭建

1.1、安装virtualbox以及vagrant

在virtualbox创建centos7环境使用的是vagrant虚拟运行环境管理工具来进行构建的,可见该篇博客:虚拟运行环境管理工具Vagrant详细使用教程

效果如下:

image-20221104104106097

使用vagrant构建的centos7环境,默认的root没有设置密码,我们需要进行设置:

sudo passwd root

快速构建Docker环境可见我之前博客(环境安装部分):快速使用Docker部署MySQL、Redis、Nginx

1.2、Docker安装MySQL与Redis

Docker构建MySQL

image-20221107171836798

/mydata/mysql/conf目录下创建mysqld.cnf文件:

[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address	= 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

接着去拉取镜像并启动:

docker pull library/mysql:5.7.36

docker run -p 3306:3306 --name mysql \
-v /etc/localtime:/etc/localtime \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/mysql.conf.d \
-e MYSQL_ROOT_PASSWORD=root  \
-d library/mysql:5.7.36

# 使用mysql容器中的命令行
docker exec -it mysql /bin/bash

# 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8

# 接着创建一个账户,该账号所有ip都能够访问
# 用户名:root  密码:root
grant all privileges on *.* to 'root' @'%' identified by 'root';

flush privileges;

Docker构建Redis

docker pull redis:5

在mydata/redis目录下创建redis.conf:文件如下

image-20221107171852051

链接:https://pan.baidu.com/s/1tT3SWnnL0OylWA5So_V9Mw 
提取码:9xko 

其中配置已经修改了,包含如下:

# 配置文件中修改说明
#bind 127.0.0.1 要注释掉,允许对外连接
appendonly yes:开启持久化
# daemonize yes 一定要要注释,注释,注释!!!

启动redis镜像,关键是设置其中的密码:

docker pull redis:5

# –restart=always 总是开机启动
# –log是日志方面的
# –appendonly yes 开启redis 持久化
# –requirepass xxx 设置密码 
docker run --log-opt max-size=100m --log-opt max-file=2  \
	-p 6379:6379 --name redis  \
	-v /etc/localtime:/etc/localtime \
	-v /mydata/redis/redis.conf:/etc/redis/redis.conf  \
	-v /mydata/redis/data:/data  \
	-d redis:5 redis-server /etc/redis/redis.conf   \
	--appendonly yes   \
	--requirepass 123456
	
# 进入redis-cli测试
docker exec -it redis redis-cli

1.3、前后端开发工具统一配置

后端

后端开发工具:idea

maven配置:Maven快速配置—配置文件

idea插件安装:lombok、mybatisx、Gitee、jrebel(Java代码修改无需重启)插件和ResetfulTool(一套 RESTful 服务开发辅助工具集)

前端

前端:vscode

安装插件:

Vetur —— 语法高亮、智能感知、Emmet 等
包含格式化功能, Alt+Shift+F (格式化全文),Ctrl+K Ctrl+F(格式化选中代码,两个 Ctrl
需要同时按着)
EsLint —— 语法纠错
Auto Close Tag —— 自动闭合 HTML/XML 标签
Auto Rename Tag —— 自动完成另一侧标签的同步修改
JavaScript(ES6) code snippets — — ES6 语 法 智 能 提 示 以 及 快 速 输 入 , 除 js 外 还 支持.ts,.jsx,.tsx,.html,.vue,省去了配置其支持各种包含 js 代码文件的时间
HTML CSS Support —— 让 html 标签上写 class 智能提示当前项目所支持的样式
HTML Snippets —— html 快速自动补全
Open in browser —— 浏览器快速打开
Live Server —— 以内嵌服务器方式打开
Chinese (Simplified) Language Pack for Visual Studio Code —— 中文语言包

1.4、Git工具安装与配置

Git的下载与配置可见我的博文(详细):Git详细使用指南(含详细命令、实操)

包含添加密钥到码云。

1.5、Gitee创建仓库与IDEA导入

Gitee创建仓库

仓库名称、初始化仓库以及选择分支模型(生产/开发模型):

image-20221104202253072

IDEA导入仓库

image-20221104202424045

image-20221104202501267

创建完成如下:

image-20221104202540327


1.6、构建微服务模块

创建模块:商品服务(product)、仓储服务(ware)、订单服务(order)、优惠券服务(coupon)、用户服务(member)

多模块相同组件:Springboot版本2.1.8.RELEASE、SpringCloud版本Greenwich.SR3

1)、引入依赖web、openfeign
2)、每一个服务,包名 com.atguigu.gulimall.xxx(product/order/ware/coupon/member)
3)、模块名:gulimall-xx

分组:com.atguigu.gulimall
坐标:gulimall-xxx
包名:com.atguigu.gulimall.xxx

构建完我们所需要的几个模块如下图(单个模块构建过程往下翻有示例):

image-20221104204952962

在当前目录下创建一个pom.xml(从之前模块中移过来),进行统一管理模块:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>谷粒商城聚合服务</description>
    <!--  不打包程jar包的指定pom  -->
    <packaging>pom</packaging>

    <!-- 统一管理模块   -->
    <modules>
        <module>gulimall-coupon</module>
        <module>gulimall-member</module>
        <module>gulimall-order</module>
        <module>gulimall-product</module>
        <module>gulimall-coupon</module>
    </modules>

</project>

如何导入这个聚合模块呢?右边Maven+号添加这个pom.xml即可:

image-20221104205338439

此时就会出现一个总的管理root:

image-20221104205431563

创建gulimall-product示例(版本说明)

image-20221104202852229

创建商品模块:

image-20221104203052030

组件选择:

image-20221104203227039

  • 后来修正为视频一样的版本2.1.8

image-20221104203321866

注意一下springboot与springcloud的版本:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<spring-cloud.version>Greenwich.SR3</spring-cloud.version>

image-20221104203855679


1.7、编写.gitignore文件(忽略上传gitee文件配置)

上面模块都构建好了之后,我们可以看到当前的版本控制管理有134个文件没有被管理:

image-20221104205803489

部分文件如.idea文件下的、target目录等我们在代码完成之后无需上传代码仓库,此时就需要在当前目录下的.gitignore中进行配置:

一些配置信息如下:

# 所有子模块下的.gitignore
**/.gitignore
# 工程目录下文件
**/mvnw
**/mvnw.cmd
**/.mvn
# idea配置文件
.idea
# 编译目录
**/target
*.iml
# 热编译工具
rebel.xml

image-20221104210421967

添加到版本控制操作:

image-20221104210542835

添加版本控制(add):

image-20221104210642619

提交到本地仓库(及push推送)

image-20221104210830803

image-20221104210856039

OK,此时我们看下Gitee仓库状态,所有的代码已经进行了上传:

image-20221104210934856


1.8、数据库初始化

下载安装数据库表设计工具

PowerDesigner16.5:PowerDesigner安装+破解+汉化PowerDesigner 安装破解

链接:https://pan.baidu.com/s/1HoifsS4ywFjyNO-jyhZy5A 
提取码:ihrj 

image-20221105132711788

数据库设计源文件
链接:https://pan.baidu.com/s/1Jv3ImyMHQEpay5RzwUK9Ug 
提取码:p2on 

下面是五个服务的表:

image-20221105132801164

创建数据库与表

对应每一个微服务都操作一个数据库

oms  订单数据库
pms  商品数据库
sms  营销数据库
ums  用户数据库
wms  库存数据库

以商品系统为准,创建utf8mb4字符集的数据库:

image-20221105113327318

依次创建好数据库之后导入预先准备的sql(注意不要走navicat的直接导入可能会出现字段提示乱码问题,我们需要打开某个sql全选后在GUI中复制执行!):

image-20221105113539929

sql文件
链接:https://pan.baidu.com/s/1IE12fJsyS6THG9xug1nmBg 
提取码:f4qr 

1.9、逆向工程(生成代码)

对于代码生成我们使用的是人人开源的项目:https://gitee.com/renrenio

image-20221105133000390

  • renren-fast作为后台管理系统后端服务
  • renren-fast-vue作为后台管理系统页面
  • renren-generator进行代码生成

1.9.1、renren-fast快速构建后端管理页面及服务

后端系统服务

renren-fast开源地址:https://gitee.com/renrenio/renren-fast

将renren-fast添加到gulimall目录下:

image-20221105133412940

数据库创建``gulimall_admin`,并且导入项目中的db目录下的mysql.sql:

image-20221105133650422

将该模块项目导入到IDEA中,接着我们修改renren-fast中的application.yml文件中的数据库连接地址和用户名与密码:

image-20221105135915706

接着启动项目,启动成功如下图所示:

image-20221105135943927

在网页上进行测试一下:http://localhost:8080/renren-fast/

image-20221105140008076

为什么会有renren-fast后缀?主要是在application.yaml中配置了server.servlet.context-path=/renren-fast

前端服务

renren-fast-vue开源地址:https://gitee.com/renrenio/renren-fast-vue

下载克隆下来之后我们进入根目录下输入命令去导入依赖:

npm install

全部添加成功如下图所示:

image-20221105140228797

你可以在config目录下index.js里看到已经配置好了对应我们renren-fast也就是admin后台系统的api地址,我们无需进行改动:

image-20221105140340497

接着去运行命令启动前端服务并进行测试访问下后台管理系统:

npm run dev

image-20221105140959356

启动成功之后我们来访问下该页面:http://localhost:8001/

image-20221105141023232

# 用户名与密码
admin
admin

成功登录后的效果如下所示:

image-20221105141104723


1.9.2、renren-generator快速生成微服务业务代码(营销服务、用户服务、订单服务、商品服务、库存服务)

最终生成模块展示

renren-generator开源地址:https://gitee.com/renrenio/renren-generator

下载克隆下来之后添加到gulimall中

image-20221105141656240

这个项目实际上提供了一个web服务,其能够连接对应的数据库通过页面中勾选指定的数据库来生成预先配置好的后端前端代码。

对应逆向生成代码的操作可见下面示例章节!

五个模块对应我们设置的开放端口为:

   微服务模块        端口       数据库表        注释
gulimall-coupon    7000     gulimall_sms  营销数据库  √
gulimall-member    8000     gulimall_ums  用户数据库  √
gulimall-order     9000     gulimall_oms  订单数据库  √
gulimall-product   10000    gulimall_pms  商品数据库  √
gulimall-ware      11000    gulimall_wms  库存数据库  √

初步搭建好的服务模块如下,右边的RestServices包含所有的服务:

image-20221105194928531

当前构建的环境代码:

链接:https://pan.baidu.com/s/1g0E-cbXrhLZPGIg0z83ykA 
提取码:ep7s 

示例:在gulimall-product模块中添加逆向工程代码

application.yml:修改连接数据库的ip地址与数据库名、用户名与密码

image-20221105142057146

generator.properties:代码生成的配置项

image-20221105142318175

  • 这个mainPath指的是引入的自定义工具类的包路径,如PageUtils、R等等。

启动该服务:http://localhost:80

image-20221105142749697

进入到网页之后,我们需要进行选中所有的表,然后进行生成代码:注意可能一个数据库会超过10条,那么我们选择一页显示50条,然后统一勾选

image-20221105144049850

生成代码的目录如下:

image-20221105144226604

我们将整个main目录复制到gulimall-product工程的src目录下(去除掉resources下的src目录也就是前端代码):

此时我们能够很明显的看到工程目录下java代码文件都是爆红,主要原因就是生成的代码中引入了一些当前工程没有引入的依赖(对于这这类可以生成不同模块的代码我们单独使用一个common包来进行引入一些第三方依赖):

image-20221105144549127

对于生成的代码解决方案

1、构建gulimall-common模块,引入生成代码所必须的一些工具类。

image-20221105160424776

当前的gulimall-common工程包
链接:https://pan.baidu.com/s/1DZ0vtrAyHTFnHZue2rzTOg 
提取码:8mvi 

pom.xml需要引入的第三方类:

<dependencies>
    <!--   mybatis-plus     -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>
    <!--    导入mysql驱动    -->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.17</version>
    </dependency>
    <!--   lombok     -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.8</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
</dependencies>

②修改代码生成器中的controller代码模板(去除掉controller部分的shiro权限代码,谷粒商城将会使用的是springsecurity)

image-20221105161013776

2、针对当前模块自定义配置准备

上面两步是针对之后所有逆向生成模块的额外步骤,接着我们来针对某个模块来进行配置,我们重新生成一下product代码放入到product模块中,接着做如下操作:

①pom.xml引入gulimall-common

<!--   引入公共模块     -->
<dependency>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

②使用renren-generator来生成对应服务的逆向代码直接复制到src目录下

③在SpringBoot启动器上添加MapperScan包扫描路径

@MapperScan("com.atguigu.gulimall.product.dao")

image-20221105163233012

④编写配置application.yml,主要数据库源以及mp的配置:

server:
  port: 10000

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.168.3.137:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF8&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto  # 主键自增
      logic-delete-value: 1
      logic-not-delete-value: 0

二、搭建分布式环境

前提:gulimall-common进行springcloud alibaba版本控制依赖

根据当前使用的springboot版本、Springcloud版本来选择对应的springcloud alibaba版本:Alibaba-SpringCloud Alibaba 版本说明

image-20221105201810603

对于2.1版本的springboot,我们需要选择2.1.2的springcloud alibaba,在谷粒商城视频里选择的是2.1.0,那我们这也就选择使用2.1.0,将其添加到gulimall-common模块中:

image-20221105202024057

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

2.1、集成Nacos注册中心

gulimall-common统一引入注册发现依赖

由于每一个服务都需要添加到注册中心,那么将nacos注册发现统一集成到common模块当中:

image-20221105211027850

<!--        服务注册/发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

启动Nacos-server服务

本地启动nacos服务,下载nacos-server1.1.3:https://github.com/alibaba/nacos/releases?page=4

image-20221105211648331

链接:https://pan.baidu.com/s/12R8-kB6drpWSxmrnJ4gwvQ 
提取码:xgct

进入到bin目录,直接双击startup.cmd来进行启动:

image-20221105212319934

image-20221105212334156

nacos访问服务端口默认是在8848端口:http://localhost:8848/nacos/

nacos
nacos

所有模块服务集成注册发现

最终集成的效果:

image-20221105213832248

查看下最终的nacos注册中心:

image-20221105213912278

示例:guli-coupon集成过程

①配置application.yaml

在应用的 /src/main/resources/application.yaml配置文件中配置 Nacos Server 地址以及application.name也就是应用名称(才能够注册上):

spring:
  application:
    name: gulimall-coupon   # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

②在启动器上开启服务注册发现注解:

@EnableDiscoveryClient //开启服务发现

启动gulimall-coupon服务:

image-20221105212644672

查看下nacos注册中心是否已经注册上:

image-20221105212707319


2.2、集成Openfeign组件

实战目标:在营销服务中编写一个接口,接着在用户服务中编写一个用户优惠券接口,在这个接口中我们将会进行远程调用营销服务中的接口并进行返回(openfeign完成远程调用)。

①在gulimall-coupon服务中添加一个接口

image-20221106145438411

@RequestMapping("/member/list")
public R memberCoupons() {
    CouponEntity couponEntity = new CouponEntity();
    couponEntity.setCouponName("满100减10");
    return R.ok().put("coupons", Arrays.asList(couponEntity));
}

②在gulimall-member服务中编写远程调用接口

首先需要给gulimall-member服务中集成openfeign并进行开启feign包扫描进行加强:

pom.xml引入:

<!--   远程调用:openfeign     -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

编写对应的feign接口:

image-20221106145711008

package com.atguigu.gulimall.member.feign;

import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @Description:
 * @Author: changlu
 * @Date: 9:59 PM
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {

    @RequestMapping("/coupon/coupon/member/list")
    public R memberCoupons();

}

在启动器上添加自动包扫描:

@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign") //开启feign客户端

最后就是在控制器上添加一个接口其中就包含远程调用:

image-20221106145744475

@Autowired
CouponFeignService couponFeignService;

@RequestMapping("/coupons")
public R test() {
    //当前服务的用户
    MemberEntity memberEntity = new MemberEntity();
    memberEntity.setNickname("长路");
    //远程调用获取优惠券
    R membercoupons = couponFeignService.memberCoupons();
    //响应用户与优惠券信息
    return R.ok().put("member", memberEntity).put("coupons", membercoupons.get("coupons"));
}

测试下接口:

image-20221106145812497


2.3、集成Nacos配置中心

介绍

命名空间:可基于环境进行隔离、也可以根据单个微服务来进行隔离。

配置集:指的就是单个命名空间下对应的group分组,场景如:单个服务在双11、618来进行分组隔离。

实战

由于我们的所有微服务都需要使用到配置中心,所以我们需要在gulimall-common模块中进行配置:

image-20221106170009017

<!--        配置中心来做配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

接着我们就需要在对应需要使用配置中心配置信息的服务模块中添加bootstrap.properties文件:

遵守的规则如下

  • 当前谷粒商城规范:按照每个微服务来创建自己的命名空间,接着使用配置分组来区分环境如dev、test、prod。
  • 加载多配置集:对数据源、框架相关的配置来统一拆分成不同的配置文件。

image-20221106170216743

spring.application.name=gulimall-coupon

# nacos配置中心地址(若是只有一条,默认namespace是public, Group是DEFAULT_GROUP,data-id是gulimall-coupon.properties)
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=cf8005b8-b2c3-47cd-b344-18661e5cba70
spring.cloud.nacos.config.group=prod

# 多配置级,将初始配置来进行拆分
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

对应在nacos管理面板上,我们需要进行添加一个单独服务的命名空间,并且去配置对应的配置文件其中包含有多环境的以及多配置信息文件:

image-20221106170335368

  • 多环境:gulimall-coupon.properties。
  • 多配置(拆分):数据库、框架、单个微服务的相关配置。
# gulimall-coupon.properties  dev
coupon.user.name=changlu-dev
coupon.user.age=29

# gulimall-coupon.properties prod
coupon.user.name=changlu-prod
coupon.user.age=28

# datasource.yml  dev
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.168.3.137:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF8&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    
# mybatis.yml  dev
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto  # 主键自增
      logic-delete-value: 1
      logic-not-delete-value: 0
      
# other.yml  dev
server:
  port: 7000
spring:
  application:
    name: gulimall-coupon   # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

对于上面多环境配置设置的目的就是我们当前来进行测试,对应测试的代码在controller中:

image-20221106170628152

启动nacos与gulimall-coupon来进行测试dev与pro环境:

image-20221106170827651

image-20221106170739798

提示:上线之后我们可以配到配置中心去,线下写代码就直接配在本地即可(由于我使用了RestServices插件,读取配置中心的话对应的一些端口就需要我们自己去手动修改,同时也会很麻烦)。


2.4、集成网关服务

image-20221106171718008

创建guilimall-gateway模块:

image-20221106200558611

image-20221106200739339

image-20221106213406086

①pom.xml中引入公共模块

<!--   引入公共模块     -->
<dependency>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

由于引入了common模块,在common模块中还带了mybatis的依赖,所以需要对其进行排除(在启动器上):

image-20221106213049034

②排除common组件的依赖

//由于引入了gulimall-common,其中包含mp的自动导入数据源,所以这里需要进行排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient  //开启注册发现

③编写注册中心的配置项

image-20221106213118388

bootstrap.properties:

server.port=88
spring.application.name=gulimall-gateway
# 服务注册
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 配置中心
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=6a7b6a2f-871b-46a9-9805-7caf19e65b09

④编写断言匹配url

application.yml:

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

image-20221106213226228

对于其中的gateway断言我们进行了处理,之后我们来对其进行测试

localhost:88?url=qq

image-20221106213301784

localhost:88?url=baidu

image-20221106213321515


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。