当前位置: 首页 > 知识库问答 >
问题:

我可以同时使用SpringMvc和webflux吗?

贺宏富
2023-03-14

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

我尝试将一个REST APIendpoint迁移到反应式webflux,并在迁移其余endpoint之前测试性能。但没用。我为他添加了路由器和处理程序,但直到我没有从依赖项中删除spring boot starter web,并禁用@RestController之前,我一直得到http404代码。有没有可能?还是我应该将所有项目迁移到反应式方法?

共有1个答案

梁华清
2023-03-14

正如Spring Boot参考文档中所解释的,如果MVC和WebFlux都可用,Spring Boot将自动配置Spring MVC应用程序。这有几个原因:

  • Spring MVC无法在Netty上运行
  • 两个架构体系将竞争相同的作业(例如,服务静态资源,映射等)
  • 在同一个容器中混合两个运行时模型不是一个好主意,可能会表现不佳或根本不起作用

根据你想要实现的目标,可能有几种方法来实现这一点。

如果您想使用WebClient来优化多个并发远程HTTP调用,并使用Reactor操作符,那么可以继续使用Spring MVC注释的控制器,并将反应类型作为返回值返回(在本Spring Boot talk中对此进行了详细介绍)。

如果您想处理纯粹的可扩展性和延迟(因此不一定是原始吞吐量),那么您可以开始使用sping-boot-starter-webva并从那里开始工作。请注意,禁止使用阻塞API(如阻塞数据库调用),并且使用FluxMono包装这些API并调度在单独的线程池上工作将在性能方面对您不利。

最后,如果您想使用Spring WebFlux提供的函数式方法,那么它的性能并不一定会更好。这实际上取决于你的用例和你如何实现它。

 类似资料:
  • 问题内容: 我想计算mysql表中的行数,而不要包含重复的条目, 我可以用吗? 问题答案: 当然。

  • 我可以同时使用工具和扩展器吗?因为当我在同一个类上使用实现时,我需要在另一个类上继承一些东西。 怎么会是那样?

  • 问题内容: 我喜欢用DDD实现的中间开发。开发是由领域驱动的,领域是应用程序中最牢固的部分。我们不依赖基础架构,持久性和表示方式。听起来不错。但是它没有商业价值。 这里有以业务为中心的BDD和外部开发。我们没有前期领域设计(选择实体,值对象,集合)。我们以用户故事为例,编写一些方案并逐一实施。我们从应用程序最可变的部分开始开发- 从演示开始。我讨厌编写脆弱的验收测试。你呢? 因此,如果这里有人成功

  • 问题内容: 我可以在同一输出流上同时使用PrintWriter和BufferedOutputStream吗? 情况是这样的: 我有一个SSLSocket程序,我希望能够在不同的时间点轻松地在套接字上同时传输字符串和字节[],而不必将byte []转换为字符串等,但是,PrintWriter仅允许我传输字符串和BufferedOutputStream只允许我传输字节。 问题答案: PrintWrit

  • 我需要在MongoDB上编写一些复杂的查询和一些简单的查询。我可以将MongoRepository用于简单查询,将MongoTemplate与查询或条件一起用于复杂查询实现相同的应用程序吗。 在相同的应用程序中同时使用MongoTemplate和MongoRepositories,这是一个好的设计吗。这种方法有什么缺点吗。 还有,编写包含大量谓词的复杂查询的最佳方法是什么,这些谓词涉及and、or

  • 我搜索过相同的内容,但面临失败。是否有其他工具可以有效地用于在多个节点上运行脚本?