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 相关文章推荐
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
Java如何实现树的同构?
Jun 22 Java/Android
Java循环队列与非循环队列的区别总结
Jun 22 Java/Android
Maven学习----Maven安装与环境变量配置教程
Jun 29 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
Java并发编程必备之Future机制
Jun 30 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
SpringCloud项目如何解决log4j2漏洞
Apr 10 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中调用JAVA
2006/10/09 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
js选项卡的制作方法
2017/01/23 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
同志主要表现材料
2014/08/21 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
毕业生实习证明
2014/09/19 职场文书
银行自荐信怎么写
2015/03/05 职场文书
工程合作意向书范本
2015/05/09 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS