当前位置: 首页 > article >正文

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 中受益以提高响应能力和资源效率的应用程序。
http://www.lryc.cn/news/2395557.html

相关文章:

  • 基于 stm32 的农用车控制系统设计
  • vue3: baidusubway using typescript
  • Redis最佳实践——性能优化技巧之集群与分片
  • vue或者前端适配makedown推荐开源依赖
  • 打打基础 | 从翻转链表到寄存器、汇编与内存
  • 深入解析 Dotnet-Boxed.Framework:提升 .NET 开发效率的利器
  • 常见相机的ISP算法
  • 2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress
  • OldRoll复古胶片相机:穿越时光,定格经典
  • 通俗易懂的 JS DOM 操作指南:从创建到挂载
  • CSS Day07
  • 爬虫框架:scrapy使用心得
  • RV1126-OPENCV 交叉编译
  • 【深度学习】 19. 生成模型:Diffusion Models
  • JMeter 直连数据库
  • 易路 iBuilder:解构企业 AI 落地困境,重构智能体时代生产力范式
  • 数据库,Spring Boot,数据源
  • Linux 第三阶段课程:数据库基础与 SQL 应用
  • 计算机网络之路由表更新
  • 万兴PDF手机版
  • Qt -使用OpenCV得到SDF
  • Python 中Vector类的格式化实现,重点拆解其超球面坐标系的设计精髓
  • DDR5 ECC详细原理介绍与基于协议讲解
  • Linux系统之gettext详解
  • 基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问
  • EC800X QuecDuino开发板介绍
  • ARM P15协处理器指令详解:架构、编程与应用实践
  • PHP轻量级聊天室源码(源码下载)
  • MySQL数据表添加字段(三种方式)
  • leetcode hot100刷题日记——33.二叉树的层序遍历