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 相关文章推荐
为什么在foreach循环中JAVA集合不能添加或删除元素
Jun 11 Java/Android
解析Java中的static关键字
Jun 14 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
浅谈resultMap的用法及关联结果集映射
Jun 30 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
java获取一个文本文件的编码(格式)信息
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
Smarty中调用FCKeditor的方法
2014/10/27 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
JS变量及其作用域
2017/03/29 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue观察模式浅析
2018/09/25 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
使用Python实现音频双通道分离
2020/12/25 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
机械设计专业应届生求职信
2013/11/21 职场文书
追悼会子女答谢词
2014/01/28 职场文书
怀念母亲教学反思
2014/04/28 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
安全学习心得体会范文
2016/01/18 职场文书
股权投资协议书
2016/03/23 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang