springboot的WebFlux 和Servlet

news2024/10/7 6:39:59

Spring Boot 中的 Servlet

定义
在 Spring Boot 中,Servlet 应用程序通常基于 Spring MVC,它是一个基于 Servlet API 的 Web 框架。Spring MVC 提供了模型-视图-控制器(MVC)架构,用于构建 Web 应用程序。

特点

  • 阻塞 I/O:Spring MVC 使用阻塞 I/O 模型,每个请求都会分配一个线程,直到处理完成。

  • 同步处理:Spring MVC 处理请求是同步的,即一个请求处理完成之前,线程不能处理其他请求。

  • 集成 Spring:Spring MVC 与 Spring 框架紧密集成,可以利用 Spring 的依赖注入、事务管理等功能。

  • 广泛使用:Spring MVC 是 Spring Boot 中最常用的 Web 技术之一,有大量的文档和社区支持。

Spring Boot 中的 WebFlux

定义
Spring WebFlux 是 Spring 5 引入的响应式 Web 框架,它支持非阻塞 I/O 和响应式编程模型。在 Spring Boot 中,WebFlux 可以用来构建高性能、高并发的 Web 应用程序。

特点

  • 非阻塞 I/O:WebFlux 使用非阻塞 I/O 模型,可以在单个线程上处理多个请求,从而提高系统的吞吐量和资源利用率。

  • 异步处理:WebFlux 支持异步处理,允许请求在后台处理,而不会阻塞主线程。

  • 响应式编程:WebFlux 遵循响应式编程原则,使用 Mono 和 Flux 等类型来处理数据流和事件。

  • 集成 Spring:WebFlux 与 Spring 生态系统紧密集成,可以与 Spring Data、Spring Security 等其他 Spring 项目无缝协作。

比较

  • 性能:WebFlux 在处理大量并发请求时,由于其非阻塞特性,通常比 Servlet 更高效。

  • 编程模型:Servlet(Spring MVC)使用传统的同步编程模型,而 WebFlux 使用响应式编程模型,后者需要开发者适应新的编程范式。

  • 生态系统:Servlet(Spring MVC)生态系统非常成熟,有大量的库和工具支持。WebFlux 作为较新的技术,生态系统正在快速发展中。

  • 适用场景:Servlet(Spring MVC)适用于传统的 Web 应用程序,而 WebFlux 适用于需要处

  • 理大量并发请求、对性能有较高要求的场景。

选择 WebFlux 还是 Servlet?

选择哪种模型取决于你的应用需求和场景:

  • 如果你的应用需要处理大量的并发请求,并且主要是 I/O 密集型,那么 WebFlux 可能是更好的选择。
  • 如果你的应用主要是 CPU 密集型,或者需要与现有的基于 Servlet 的应用程序集成,那么 Servlet 可能更合适。

Spring Boot 支持

Spring Boot 提供了对 WebFlux 和 Servlet 的支持。你可以在同一个 Spring Boot 应用程序中使用它们,例如,通过在 application.propertiesapplication.yml 文件中设置 spring.main.web-application-type 来指定使用哪种类型的 Web 应用程序。

# 指定使用 WebFlux 
spring.main.web-application-type=reactive

# 指定使用 Servlet 
spring.main.web-application-type=servlet

如果你选择使用 WebFlux,你的应用程序将需要使用响应式依赖项,如 spring-boot-starter-webflux,而不是传统的 spring-boot-starter-web




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mac】增加 safari 体验的插件笔记

Safari 本身的功能不全面,探索积累了一点插件笔记,提升使用体验;但后面因为插件或会影响运行速度,就全部都禁止了。做个笔记记录一下。 Cascadea 相当于 stylus,可以自定义页面。测试过几个,只有几个可行。…

Java:爬虫htmlunit抓取a标签

如果对htmlunit还不了解的话可以参考Java:爬虫htmlunit-CSDN博客 了解了htmlunit之后,我们再来学习如何在页面中抓取我们想要的数据,我们在学习初期可以找一些结构比较清晰的网站来做测试爬取,首先我们随意找个网站如下&#xff…

【StableDiffusion】Embedding 底层原理,Prompt Embedding,嵌入向量

Embedding 是什么? Embedding 是将自然语言词汇,映射为 固定长度 的词向量 的技术 说到这里,需要介绍一下 One-Hot 编码 是什么。 One-Hot 编码 使用了众多 5000 长度的1维矩阵,每个矩阵代表一个词语。 这有坏处&#xff0c…

美国空军发布类ChatGPT产品—NIPRGPT

6月11日,美国空军研究实验室(AFRL)官网消息,空军部已经发布了一款生成式AI产品NIPRGPT。 据悉,NIPRGPT是一款类ChatGPT产品,可生成文本、代码、摘要等内容,主要为为飞行员、文职人员和承包商提…

Python 中浅拷贝(copy)和深拷贝(deepcopy)

1. 浅拷贝: 它创建一个新的对象,但对于原始对象内的子对象(如列表中的嵌套列表),只是复制了引用。例如: import copy original_list [1, 2, 3] shallow_copied_list copy.copy(original_list) original_…

【PIXEL】2024年 Pixel 解除 4G限制

首先在谷歌商店下载 Shizuku 和 pixel IMS 两个app 然后打开shizuku ,按照它的方法启动 推荐用adb 启动( 电脑连手机 ,使用Qtscrcpy最简洁) 一条指令解决 shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.ap…

Chrome/Edge浏览器视频画中画可拉动进度条插件

目录 前言 一、Separate Window 忽略插件安装,直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页,但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候&#xff…

ListView的使用

📖ListView的使用 ✅1. 创建ListView✅2. 创建适配器Adapter✅3. 开始渲染数据 主要3步骤: 创建ListView 创建适配器Adapter,和Adapter对应的视图 开始渲染数据 效果图: ✅1. 创建ListView 例如现有DemoActivity页面&#xf…

C# WinForm —— 33 ContextMenuStrip介绍

1. 简介 右键某个控件/窗体时,弹出来的菜单,比如VS中右键窗体,弹出来的这个菜单: 和MenuStrip类似,ContextMenuStrip主菜单下面可以有子菜单,子菜单下面可以有下一级子菜单 2. 属性 和MenuStrip一样 …

国内服务器安装 Docker 服务和拉取 dockerhub 镜像

前提: 有一台海外的VPS,目的是安装dockerhub镜像.适用debian系统 1: 安装 docker-ce (国内服务器) sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/…

如何免费用 Qwen2 辅助你翻译与数据分析?

对于学生用户来说,这可是个好消息。 开源 从前人们有一种刻板印象——大语言模型里好用的,基本上都是闭源模型。而前些日子,Meta推出了Llama3后,你可能已经从中感受到现在开源模型日益增长的威力。当时我也写了几篇文章来介绍这个…

【DevOps】Ubuntu基本使用教程

目录 引言 Ubuntu简介 安装Ubuntu 准备工作 创建启动盘 安装过程 桌面环境 基本操作 定制桌面 文件管理 文件操作 文件权限 软件管理 安装软件 更新软件 系统设置 用户账户 网络设置 电源管理 命令行操作 常用命令 管理权限 安全与维护 系统更新 备份…

pdf添加书签的软件,分享3个实用的软件!

在数字化阅读日益盛行的今天,PDF文件已成为我们工作、学习和生活中不可或缺的一部分。然而,面对海量的PDF文件,如何高效地进行管理和阅读,成为了许多人关注的焦点。其中,添加书签功能作为提高PDF文件阅读体验的重要工具…

JetLinks开源物联网平台社区版部署教程

1.上github搜素jetlinks 2.找到源代码,并且下载到本地。 3.项目下载完成之后,还需要另外下载三个核心依赖模块。在github找到jetlinks。 4.点击进去下载,下载完成之后,你会发现里面有三个文件夹是空白的,先不用理会&am…

【云计算】Docker部署Nextcloud网盘并实现随地公网远程访问

配置文件 切换root权限,新建一个nextcloud的文件夹,进入该目录,创建docker-compose.yml [cpslocalhost ~]$ su root Password: 666666 [rootlocalhost cps]# ls Desktop Documents Downloads Music Pictures Public Templates Vide…

Day 16:3040. 相同分数的最大操作数目II

Leetcode 相同分数的最大操作数目II 给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作中的 任意 一个: 选择 nums 中最前面两个元素并且删除它们。选择 nums 中最后两个元素并且删除它们。选择 nums 中第一个和最后一…

React基础教程(07):条件渲染

1 条件渲染 使用条件渲染,结合TodoList案例,进行完善,实现以下功能: 当列表中的数据为空的时候,现实提示信息暂无待办事项当列表中存在数据的时候,提示信息消失 这里介绍三种实现方式。 注意这里的Empty是…

STM32项目分享:智能小区充电桩系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…

DOM-事件

一、事件3要素&#xff1a;事件源&#xff0c;事件类型&#xff0c;事件处理程序 1.事件源&#xff1a;触发对象按钮 2.事件类型&#xff1a;如何让触发&#xff0c;是点击onclick还是鼠标经过&#xff0c;键盘按下。 3.事件处理程序&#xff1a;通过一个函数赋值完成 <…