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 中受益以提高响应能力和资源效率的应用程序。
相关推荐
菥菥爱嘻嘻几秒前
React---day6、7
前端·javascript·react.js
lihainuo1 分钟前
一篇学会Spring Boot Starter封装
后端
程序员岳焱2 分钟前
14.Java反射机制:解锁动态编程的魔法之门
java·后端·编程语言
GIS之家6 分钟前
vue+cesium示例:地形开挖(附源码下载)
前端·javascript·vue.js·gis·cesium·webgis
往日情怀酿做酒 V176392963815 分钟前
web架构2------(nginx多站点配置,include配置文件,日志,basic认证,ssl认证)
前端·nginx·架构
独立开阀者_FwtCoder17 分钟前
Axios 请求传 ArrayBuffer 参数
前端·javascript·后端
@菜菜_达17 分钟前
CSS radial-gradient函数详解
前端·css
小鱼人爱编程36 分钟前
进入外包,我犯了所有程序员都会犯的错!
android·前端·程序员
明月看潮生38 分钟前
青少年编程与数学 02-020 C#程序设计基础 17课题、WEB与移动开发
开发语言·前端·青少年编程·c#·编程与数学
工业互联网专业40 分钟前
基于Android的一周穿搭APP的设计与实现 _springboot+vue
android·vue.js·spring boot·毕业设计·源码·课程设计·一周穿搭app