gateway与spring-boot-starter-web冲突问题的解决
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
问题分析:
查看控制台打印日志:
可以看到是 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 网关版本冲突问题
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>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: Vue通过懒加载提升页面响应速度
下一篇: Shell编程之变量的高级用法详解
推荐阅读
-
对于ASP编码问题的深入研究与最终解决方案
-
html文件中jquery与velocity变量中的$冲突的解决方法
-
Fedora14下android开发: eclipse与ibus确有冲突的问题分析
-
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
-
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
-
Windows与Linux换行符差别所引起的问题的解决方法
-
python3.8与pyinstaller冲突问题的快速解决方法
-
android基础教程之android的listview与edittext冲突解决方法
-
如何在vue里面优雅的解决跨域(路由冲突问题)
-
Table 组件构建过程中遇到的问题与解决思路