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 相关文章推荐
springBoot基于webSocket实现扫码登录
Jun 22 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
实体类或对象序列化时,忽略为空属性的操作
Jun 30 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
JAVA API 实用类 String详解
Oct 05 Java/Android
Spring 使用注解开发
May 20 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
httpclient调用远程接口的方法
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 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
javascript 定义新对象方法
2010/02/20 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python下载网络小说实例代码
2018/02/03 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
django跳转页面传参的实现
2020/09/17 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
面试必备的求职信
2014/05/25 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
2015年招聘工作总结
2014/12/12 职场文书
前台接待岗位职责
2015/02/03 职场文书
大学生团员个人总结
2015/02/14 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
Python matplotlib绘制雷达图
2022/04/13 Python
详解Vue3使用axios的配置教程
2022/04/29 Vue.js