如 Spring Boot 参考文档中所述,如果 MVC 和 WebFlux 都可用,则 Spring Boot 将自动配置 Spring MVC 应用程序。这有几个原因:
- 春季MVC无法在Netty上运行
- 两个基础结构将竞争相同的工作(例如,提供静态资源,映射等)
- 在同一容器中混合使用两个运行时模型不是一个好主意,并且可能会表现不佳或根本不起作用
根据您要实现的目标,可能有几种方法可以解决这个问题。
如果您想使用来优化多个并发远程HTTP调用并使用Reacter运算符,则可以继续使用Spring MVC注释控制器并返回反应式类型作为返回值(在此Spring Boot讨论中将对此进行详细介绍)。WebClient
如果你想处理纯粹的可伸缩性和延迟(所以不一定是原始吞吐量),那么你可以开始使用并从那里开始工作。请注意,禁止使用阻塞 API(如阻塞数据库调用),并且包装那些在单独的线程池上工作的或 和调度的 API 将在性能方面对您不利。spring-boot-starter-webflux
Flux
Mono
最后,如果你想使用Spring WebFlux提供的函数式方法,那么它不一定能表现得更好。这实际上取决于您的用例以及您如何实现它。