Spring Boot 中的 Web 应用与 Reactive Web 应用

该判断题表述为:"Spring Boot启动过程中会判断当前应用类型是Web应用还是Reactive Web应用。"

这个说法是 正确的。Spring Boot 的自动配置机制会检查类路径,以确定是将应用程序配置为传统的 Servlet Web 应用还是 Reactive Web 应用。


Spring Boot 中的 Web 应用与 Reactive Web 应用 🌐⚡

Spring Boot 支持两种截然不同的编程模型来构建 Web 应用程序:

Web 应用 (Servlet 技术栈)

  • 核心技术 :构建于 Servlet API (例如 javax.servletjakarta.servlet) 之上。
  • 默认 Web 服务器 :通常使用嵌入式服务器,如 Tomcat (默认)、Jetty 或 Undertow。
  • 编程模型 :主要是命令式阻塞式。每个传入的请求都由线程池中的一个专用线程处理。如果该线程执行阻塞操作(如对数据库或另一服务的 I/O),它将保持阻塞状态,直到操作完成,从而消耗资源。
  • 关键框架Spring MVC (spring-webmvc) 是用于构建这些应用程序的框架。它历史悠久,拥有庞大的生态系统和同步的、每个请求一个线程的模型。
  • 依赖项 :通过 pom.xmlbuild.gradle 文件中的 spring-boot-starter-web 来表明。此启动器会引入 Spring MVC 和像 Tomcat 这样的嵌入式 servlet 容器。
  • 使用场景
    • 传统的 Web 应用程序和 REST API。
    • 阻塞式 I/O 可接受或不可避免的应用程序。
    • 具有现有 Spring MVC 代码库或严重依赖 Servlet 特定功能的项目。
    • 对于熟悉传统 Web 框架的开发人员来说,其逻辑更简单。

Reactive Web 应用 (Reactive 技术栈)

  • 核心技术 :构建于 Project Reactor (或 RxJava) 和非阻塞 I/O 之上。
  • 默认 Web 服务器 :通常使用嵌入式服务器,如 Netty (默认)、Tomcat (有限制)、Jetty 或 Undertow,它们都能够处理非阻塞 I/O。
  • 编程模型声明式异步非阻塞 。它旨在使用少量线程(事件循环)处理许多并发请求。传统上会阻塞的操作(如 I/O)会返回一个发布者(Project Reactor 中的 MonoFlux),该发布者将在数据可用时发出数据,而不会阻塞处理线程。
  • 关键框架Spring WebFlux (spring-webflux) 是用于构建响应式 Web 应用程序的框架。它支持两种编程模型:
    • 基于注解 :类似于 Spring MVC (使用 @Controller, @GetMapping 等),但具有响应式返回类型,如 Mono<User>Flux<Order>
    • 函数式 :一种更程序化的方式,使用 RouterFunctionHandlerFunction 定义路由和处理器。
  • 依赖项 :通过 pom.xmlbuild.gradle 文件中的 spring-boot-starter-webflux 来表明。此启动器会引入 Spring WebFlux 和像 Netty 这样的响应式 Web 服务器。
  • 使用场景
    • 需要以最少的资源使用处理大量并发连接的高并发应用程序(例如,微服务、流式 API、实时应用程序)。
    • 需要对外部服务进行大量调用,并可以从非阻塞 I/O 中受益以提高响应能力和资源效率的应用程序。
相关推荐
流光D几秒前
AI时代,搭建 web 站点并配置 nginx 反向代理流程
运维·服务器·前端·人工智能·nginx·ai·ai编程
王川70813 分钟前
Vue3 + uni-app 给商会小程序做一个动态表单引擎(
后端
梨想橙汁13 分钟前
CSS Grid 网格布局:二维布局神器,轻松实现复杂网页排版
前端·css
lhldsg13 分钟前
酒吧点餐小程序开发:从需求分析到技术落地实战
java·前端·小程序·架构·交友
Csvn14 分钟前
微前端样式隔离:为什么你的 CSS 串到别人家了?Shadow DOM、CSS Variables 与 @layer 实战
前端
金花顺16 分钟前
android_media_AudioTrack
前端·面试
木公子17 分钟前
Vue3源码精读04:Scheduler 调度器深度解析|异步批量更新与任务队列源码全解
前端·vue.js
YHL18 分钟前
🧠 React useContext 深度解析:告别 Props 层层传递的噩梦
前端·react.js
烂蜻蜓21 分钟前
Flask入门教程(二十四):请求对象API——获取客户端数据的完整指南
后端·python·flask
geovindu23 分钟前
CSharp: Template Method Pattern
开发语言·后端·c#·.net·模板方法模式·行为模式