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


Posted in Java/Android onJuly 16, 2021

gateway与spring-boot-starter-web 冲突

环境:

SpringCloud 版本 ---- Finchley.SR2

SpringBoot 版本 ---- 2.0.6.RELEASE

问题描述:

将 zuul 网关升级为 gateway 时,引入gateway 依赖启动网关子项目报错

引入的依赖:

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

启动网关报错

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冲突问题的解决

可以看到是 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 的内置容器,不支持非阻塞

问题解决:

有两种解决方式:

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>

成功启动项目

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

gateway 网关版本冲突问题

1、spring-cloud版本

<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

2、sprring-boot版本

<version>2.0.3.RELEASE</version>

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.

4、原因

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

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

版本冲突

5、解决

可以删除:

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java基础之线程锁相关知识总结
Jun 30 Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 Java/Android
SpringBoot快速入门详解
Jul 21 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
解决springboot druid数据库连接失败后一直重连的方法
Apr 19 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 Java/Android
Android移动应用开发指南之六种布局详解
Sep 23 Java/Android
springboot集成springCloud中gateway时启动报错的解决
Jul 16 #Java/Android
JavaWeb 入门篇(3)ServletContext 详解 具体应用
JavaWeb 入门:Hello Servlet
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
mybatis 获取无数据的字段不显示的问题
Jul 15 #Java/Android
Lombok的详细使用及优缺点总结
Jul 15 #Java/Android
Java Socket实现多人聊天系统
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
品学兼优的大学生自我评价
2013/09/20 职场文书
消防安全宣传口号
2014/06/10 职场文书
机械专业技术员求职信
2014/06/14 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
深入详解JS函数的柯里化
2021/06/09 Javascript
关于Python中*args和**kwargs的深入理解
2021/08/07 Python