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 中受益以提高响应能力和资源效率的应用程序。
相关推荐
铭毅天下7 分钟前
EasySearch Rules 规则语法速查手册
开发语言·前端·javascript·ecmascript
GISer_Jing18 分钟前
AI Agent操作系统架构师:Harness Engineer解析
前端·人工智能·ai·aigc
英俊潇洒美少年27 分钟前
css中专门用来提升渲染性能、减少重排重绘的属性
前端·css
ybwycx30 分钟前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
天若有情67340 分钟前
前端HTML精讲01:别再乱 div 一把抓,吃透语义化标签才是进阶第一步
前端·html
Highcharts.js41 分钟前
React 开发者的图表库生态:Highcharts React
前端·react.js·前端框架
阿部多瑞 ABU41 分钟前
文明文化悖论
前端·人工智能·ai写作
qqty12171 小时前
springboot+mybaties项目中扫描不到@mapper注解的解决方法
java·spring boot·mybatis
钛态1 小时前
Flutter 三方库 react 泛前端核心范式框架鸿蒙原生层生态级双向超能适配:跨时空重塑响应式单向数据流拓扑与高度精密生命周期树引擎解耦视图渲染控制中枢(适配鸿蒙 HarmonyOS ohos)
前端·flutter·react.js
全栈前端老曹1 小时前
【前端地图】地图开发基础概念——地图服务类型(矢量图、卫星图、地形图)、WGS84 / GCJ-02 / BD09 坐标系、地图 SDK 简介
前端·javascript·地图·wgs84·gcj-02·bd09·地图sdk