spring-boot-starter-webflux与spring-boot-starter-jetty依赖冲突问题咨询
嘿,这个问题我熟!咱们先搞清楚为啥会报错,再给你具体的解决办法。
错误根源
你看到的这个提示,核心原因是Spring MVC(传统阻塞式Web框架)和Spring WebFlux(响应式Web框架)是互斥的,不能在同一个Spring Boot应用中同时启用。
那为啥你加了spring-boot-starter-webflux和spring-boot-starter-jetty就触发了冲突?因为spring-boot-starter-jetty默认是为Spring MVC设计的——它的依赖树里自带了spring-boot-starter-web(也就是Spring MVC的核心依赖包)。你手动引入WebFlux之后,Spring Boot的自动配置机制同时检测到了MVC和WebFlux的存在,自然就抛出了冲突提示。
解决步骤
要让Jetty成为WebFlux的嵌入式服务器(WebFlux默认用Netty,不过可以替换成Jetty/Tomcat),你需要修改Maven依赖,把Jetty starter里自带的Spring MVC依赖排除掉:
<!-- 引入响应式WebFlux核心依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <!-- 引入Jetty,但排除自带的Spring MVC依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </exclusion> </exclusions> </dependency>
另外还要做两个检查:
- 确认项目里没有手动添加
@EnableWebMvc或@EnableWebFlux注解(Spring Boot自动配置已经帮你处理了框架启用,手动加反而可能出问题) - 用Maven命令排查是否有其他依赖悄悄引入了Spring MVC:
如果发现有其他依赖带了mvn dependency:treespring-boot-starter-web,同样用<exclusion>标签把它排除掉。
这样调整后,Spring Boot就会用Jetty来运行你的WebFlux应用,冲突也就解决了。
内容的提问来源于stack exchange,提问作者Melad Basilius
相关产品推荐
相关产品推荐

