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 相关文章推荐
SpringCloud Alibaba 基本开发框架搭建过程
Jun 13 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
Java 常见的限流算法详细分析并实现
Apr 07 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 Java/Android
SpringBoot Http远程调用的方法
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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
php构造函数的继承方法
2015/02/09 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
Javascript缓存API
2016/06/14 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
工程班组长岗位职责
2013/12/30 职场文书
单位成立周年感言
2014/01/26 职场文书
联谊活动策划书
2014/01/26 职场文书
服装促销活动方案
2014/02/23 职场文书
优秀教师事迹材料
2014/12/15 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python