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 相关文章推荐
Spring Cache和EhCache实现缓存管理方式
Jun 15 Java/Android
eclipse创建项目没有dynamic web的解决方法
Jun 24 Java/Android
Java基于字符界面的简易收银台
Jun 26 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
SpringBoot读取Resource下文件的4种方法
Jul 02 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
Jul 15 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
Flutter集成高德地图并添加自定义Maker的实践
Apr 07 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Spring 使用注解开发
May 20 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
spring boot实现文件上传
Aug 14 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下获取客户端ip地址的函数
2010/03/15 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
php二维码生成以及下载实现
2017/09/28 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
django fernet fields字段加密实践详解
2019/08/12 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
Python进行统计建模
2020/08/10 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
香港交友网站:be2香港
2018/07/22 全球购物
小学班主任经验交流材料
2014/12/16 职场文书
尊师重教主题班会
2015/08/14 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL