环境:
spring-boot:2.1.8
spring-cloud:Greenwich.SR3

问题描述:
在加载spring-cloud-starter-gateway网关依赖时控制台出现错误:

spring-cloud-starter-gateway:unknown

导入网关的依赖为:

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

依赖爆红的原因是既没有指定版本号,依赖管理器导入也错误,导成spring-cloud-alibaba-dependencies的了。而该组件是由spring-cloud管理的,这是两个不同的依赖管理器。

正确的依赖管理器:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

另外要注意两点:

1)在使用spring-boot组件时,spring-boot和spring-cloud的版本要对应:

image-20201127055050856

2)gateway会与spring-boot-starter-web产生冲突。

原因是Gateway构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。

而启动时默认使用了 spring-boot-starter-web 的内置容器,不支持非阻塞。

  • 问题解决:
    有两种解决方式:
    1、 排除 web 内置容器

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- Maven整个生命周期内排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    2、 使用 spring-webflux 模块,webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐