如何解决gateway与spring-boot-starter-web冲突问题

本篇内容介绍了“如何解决gateway与spring-boot-starter-web冲突问题”的有关知识,在实际案例的操作过程中,今天遇到了这个问题。

gateway与spring-boot-starter-web 冲突

环境:

SpringCloud 版本 ----Hoxton.SR9

SpringBoot 版本 ---- 2.3.8.RELEASE 

问题描述:

使用 gateway 时,引入gateway 依赖启动网关子项目报错

引入的依赖:


    org.springframework.cloud
    spring-cloud-starter-gateway

启动网关报错

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-12-31 10:26:35.211 ERROR 13124 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.

Action:
Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.
Process finished with exit code 1

问题分析:

查看控制台打印日志:

如何解决gateway与spring-boot-starter-web冲突问题_第1张图片

可以看到是 web 依赖下的 tomcat 容器启动失败,且打印出 nio 异常。

回顾一下 zuul 和 gateway 的区别:

Zuul: 构建于 Servlet 2.5,兼容3.x,使用的是阻塞式的API,不支持长连接,比如 websockets。

Gateway:构建于 Spring 5+,基于 Spring Boot 2.x 响应式的、非阻塞式的 API。同时,它支持 websockets,和 Spring 框架紧密集成。

报错原因:启动时默认使用了 spring-boot-starter-web 的内置容器,不支持非阻塞。也就是说用Zuul的话,没有这个问题,用gateway就不行。

问题解决:

思路分析:如果该模块不需要用到starter-web依赖的话,直接去掉该依赖就行。如果引用了其他模块,里面有starter-web依赖的话,则可以用下面两种方案去解决

方案一、 排除 web 内置容器:


    org.springframework.boot
    spring-boot-starter-web
    
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    

方案二、使用 starter-webflux 依赖替代 starter-web 依赖:

【因为webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务】


    org.springframework.boot
    spring-boot-starter-webflux

成功启动项目:

如何解决gateway与spring-boot-starter-web冲突问题_第2张图片

 

二、另外:如果SpringBoot和SpringCloud的版本有冲突的话,

也会有gateway 和 starter-web 依赖冲突问题:

比如:

1、spring-cloud版本

Finchley.RELEASE

2、sprring-boot版本

2.0.3.RELEASE

3、错误描述

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-05-21 16:53:50.138 ERROR 15308 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.

Action:
Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' in your configuration.

原因:


    org.springframework.boot
    spring-boot-starter-web


     org.springframework.cloud
     spring-cloud-starter-gateway
 

版本冲突

 

解决:

可以删除:


  org.springframework.boot
  spring-boot-starter-web

 

 

 

 

 

你可能感兴趣的:(gateway,spring,boot,springcloud,intellij-idea)