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 26 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Java设计模式中的命令模式
Apr 28 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 Java/Android
SpringBoot接入钉钉自定义机器人预警通知
Jul 15 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长字符串定义方法
2012/07/12 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
比较完整的微信开发php代码
2016/08/02 PHP
JavaScript高级程序设计
2006/12/29 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
js图片预加载示例
2014/04/30 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
Python中super函数用法实例分析
2019/03/18 Python
django富文本编辑器的实现示例
2019/04/10 Python
python解析xml简单示例
2019/06/21 Python
使用pandas读取文件的实现
2019/07/31 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
电大自我鉴定范文
2013/10/01 职场文书
新年爱情寄语
2014/04/08 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
报到证办理个人委托书
2014/10/06 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
GPU服务器的多用户配置方法
2022/07/07 Servers