我可以一起使用SpringMvc和webflux吗?

Vla*_*liy 12 java reactive-programming spring-boot project-reactor spring-webflux

我想在一个项目中使用2种方法(反应式和标准式)。

我尝试将一个REST API端点迁移到反应式Webflux并测试性能,然后再迁移其余的。但这没有用。我为他添加了路由器和处理程序,但是直到我没有spring-boot-starter-web从依赖项中删除并禁用 @RestController我,我一直404都得到了HTTP 代码。有没有可能?还是应该将所有项目迁移到被动方法?

Bri*_*zel 21

如Spring Boot参考文档中所述,如果MVC和WebFlux均可用,则Spring Boot将自动配置Spring MVC应用程序。有几个原因:

  • Spring MVC无法在Netty上运行
  • 两种基础架构都将竞争同一工作(例如,提供静态资源,映射等)
  • 在同一个容器中混合两个运行时模型不是一个好主意,并且可能会表现不佳或根本无法工作

根据您要实现的目标,可能有几种方法可以解决此问题。

如果您想WebClient优化多个并发的远程HTTP调用并使用Reactor运算符,则可以继续使用带有Spring MVC注释的控制器并将返回类型作为返回值返回(有关更多信息,请参见Spring Boot讨论)。

如果您想使用纯可伸缩性和延迟(因此不一定需要原始吞吐量),则可以开始使用spring-boot-starter-webflux并从那里开始工作。请注意,禁止使用阻塞API(例如阻塞数据库调用),并且在性能方面不利于您,将它们与Flux或包装在一起Mono并安排在单独的线程池上工作。

最后,如果您想使用Spring WebFlux提供的功能方法,那么它不一定会表现更好。这实际上取决于您的用例以及实现方式。

  • 完美的答案!谢谢布莱恩 (2认同)