我想在一个项目中使用两种方法(反应性和标准方法)。
我尝试将一个REST API端点迁移到反应式Webflux并测试性能,然后再迁移其余的。但这没有用。我为他添加了路由器和处理程序,但是直到我没有从依赖项中删除spring-boot-starter-web
并禁用@RestController
为止,我一直都得到http 404
代码。有没有可能?还是应该将所有项目迁移到被动方法?
答案 0 :(得分:10)
如Spring Boot参考文档Spring Boot will auto-configure a Spring MVC application if both MVC and WebFlux are available中所述。造成这种情况的原因有很多:
根据您要实现的目标,可能有几种方法可以解决此问题。
如果您想使用WebClient
来优化多个并发的远程HTTP调用并使用Reactor运算符,则可以继续使用带有Spring MVC注释的控制器,并将返回类型作为返回值返回(more on this in this Spring Boot talk )。
如果您想使用纯可伸缩性和延迟(因此不一定需要原始吞吐量),则可以开始使用spring-boot-starter-webflux
并从那里开始工作。请注意,禁止使用阻塞API(例如阻塞数据库调用),而用Flux
或Mono
包装这些API并安排在单独的线程池上工作将对性能不利。
最后,如果您想使用Spring WebFlux提供的功能方法,那么它不一定会表现更好。这实际上取决于您的用例以及实现方式。