Spring Web vs Spring Webflux

article/2025/8/28 23:13:46

当你需要构建Web应用程序时,Spring Web 和 Spring Webflux 是Spring生态系统中的两个框架,但它们之间有一些关键区别。

e095400b3022a9bd59bb47d4b9255749.png

Spring Web 是一个传统的Web框架,它构建在Servlet API之上。它旨在处理阻塞式I/O,即线程在从数据库或其他服务接收到响应之前被阻塞。Spring Web非常适合需要同步通信的传统Web应用程序。

相反,Spring Webflux 是一个基于Reactive Streams的响应式Web框架。它设计用于处理非阻塞I/O,即在等待来自数据库或其他服务的响应时,线程不会被阻塞。相反,应用程序可以在等待响应时继续处理其他请求。Spring Webflux非常适合需要高并发性能的应用程序,例如流式应用程序实时数据处理

下面是两个示例的代码:

Spring Web示例:

@RestController
public class WeatherController {@Autowiredprivate WeatherService weatherService;@GetMapping("/weather")public String getWeather() {WeatherData weatherData = weatherService.getWeatherData();return "The temperature in " + weatherData.getCity() + " is " + weatherData.getTemperature() + " degrees Celsius.";}
}@Service
public class WeatherService {@Autowiredprivate RestTemplate restTemplate;public WeatherData getWeatherData() {ResponseEntity<WeatherData> response = restTemplate.getForEntity("https://api.weather.com/weatherdata", WeatherData.class);return response.getBody();}
}

Spring Webflux示例:

@RestController
public class WeatherController {@Autowiredprivate WeatherService weatherService;@GetMapping("/weather")public Mono<String> getWeather() {return weatherService.getWeatherData().map(weatherData -> "The temperature in " + weatherData.getCity() + " is " + weatherData.getTemperature() + " degrees Celsius.");}
}@Service
public class WeatherService {@Autowiredprivate WebClient webClient;public Mono<WeatherData> getWeatherData() {return webClient.get().uri("https://api.weather.com/weatherdata").retrieve().bodyToMono(WeatherData.class);}
}

可以看到,Spring Webflux示例使用了响应式编程概念,如MonoWebClient,来处理非阻塞I/O和并发性能。而Spring Web示例则使用传统的阻塞I/O概念,如RestTemplateResponseEntity

如果Spring Web和Spring Webflux都在相同的系统资源上运行,并且同时有300个请求进入,由于其非阻塞I/O的方法,Spring Webflux的性能会更好。

在Spring Web中,每个请求都将被同步处理,这意味着处理请求的线程将被阻塞,直到接收到响应。对于300个请求,这将导致300个线程被阻塞,可能会导致高CPU和内存使用率。

相比之下,Spring Webflux可以使用单个线程同时处理300个请求,因为它使用非阻塞I/O。处理请求的线程在等待响应时不会被阻塞,而是能够处理其他请求。这导致与Spring Web相比,CPU和内存使用率较低。

总之,如果您需要处理高并发负载,由于其处理非阻塞I/O和更有效地使用系统资源的能力,Spring Webflux将是更好的选择。

以下是Spring Web和Spring Webflux的Maven依赖和配置文件。

Spring Web的Maven依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.2</version>
</dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.3.1</version>
</dependency>

这些依赖包括以下库:

•Spring Web•Spring Web MVC•Spring Boot自动配置•Spring Boot Actuator(用于监控和管理应用程序)

application.yml

server:port: 8080
spring:datasource:url: jdbc:postgresql://localhost:5432/mydbusername: myusernamepassword: mypassworddriver-class-name: org.postgresql.Driverjpa:hibernate:ddl-auto: update

Spring Webflux的Maven依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.6.2</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb-reactive</artifactId><version>2.6.2</version>
</dependency>

application.yml

server:port: 8080
spring:data:mongodb:host: localhostport: 27017database: mydbusername: myusernamepassword: mypassword

http://chatgpt.dhexx.cn/article/I4i1Lanw.shtml

相关文章

Spring Boot(5)之 WebFlux 响应式编程

1、WebFlux简介 springWebFlux 是 SpringFrameworl5.0 添加的新功能&#xff0c;WebFlux 本身是追随当下最火的 Reactive Programming 而诞生的框架&#xff0c;那么本编就来简述下这个框架到底是做什么的。 参考&#xff1a;Spring-WebFlux简介与使用 1.1、关于WebFlux 我们…

对比WebFlux和WebMVC (为什么使用WebFlux)

对比WebFlux和WebMVC (为什么使用WebFlux) 1.0 WebFlux吞吐量对比WebMVC 2.0 WebFlux延迟/CPU对比WebMVC 3.0 WebFlux内存使用对比WebMVC 4.0 WebFlux最大处理请求对比WebMVC 1

Spring(十)Webflux

Webflux 1、SpringWebflux 介绍 &#xff08;1&#xff09;是 Spring5 添加新的模块&#xff0c;用于 web 开发的&#xff0c;功能和 SpringMVC 类似的&#xff0c;Webflux 使用当前一种比较流程响应式编程出现的框架。 &#xff08;2&#xff09;使用传统 web 框架&#xff…

Spring:Webflux响应式编程

目录 简介响应式编程Reactor信号操作符 SpringWebflux 执行流程和API 注解实现SpringWebflux 说明&#xff1a;基于atguigu学习笔记。 简介 Webflux是 Spring5 添加新的模块&#xff0c;用于 web 开发的&#xff0c;功能和 SpringMVC 类似的&#xff0c;Webflux 使用当前一种比…

WebFlux入门详解

文章目录 一、 WebFlux介绍1、什么是 WebFlux2、反应式库介绍2.1 Reactive Stream2.2 Reactor2.3 Reactive Stream、Reactor 和 WebFlux 关系 二、入门WebFlux1、简单介绍2、简单的例子构造 三、WebFlux与数据库1、介绍2、r2dbc实战前期准备2.1 引入依赖与配置2.2 创建数据表2.…

springboot之webmvc和webflux浅析

webmvc和webflux作为spring framework的两个重要模块&#xff0c;代表了两个IO模型&#xff0c;阻塞式和非阻塞式。 1、webmvc webmvc是基于servlet的阻塞式模型&#xff0c;一个请求到达服务器后会单独分配一个线程去处理请求&#xff0c;如果请求包含IO操作&#xff0c;线程…

Webflux核心

什么是WebFlux? Spring WebFlux 是一套全新的 Reactive Web 栈技术&#xff0c;实现完全非阻塞&#xff0c;支持 Reactive Streams 背压等特性&#xff0c;并且运行环境不限于 Servlet 容器&#xff08;Tomcat、Jetty、Undertow&#xff09;&#xff0c;如 Netty 等。Spring W…

SpringBoot Webflux解析

1. Webflux介绍 Webflux是一种异步非阻塞的IO模型&#xff0c;当有请求过来时&#xff0c;它会将请求交由worker线程去处理&#xff0c;这样就可以极大的提升吞吐量&#xff0c;所以他比较适合用于IO密集型的场景。 webflux虽然可以给我带来吞吐量的提升&#xff0c;但是同时也…

Webflux快速入门

传统的Web框架&#xff0c;如struts2&#xff0c;springmvc等都是基于Servlet API与Servlet容器基础之上运行的&#xff0c;在Servlet3.1之后才有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步的框架&#xff0c;它的核心是基于Reactor的相关API实现的。相对于传统的web框…

Spring-webflux 响应式编程

热爱可抵漫长岁月 文章目录 1. 前言2. Spring-webflux简介3. 什么是“响应式”4. Spring-webflux的响应式API5. Spring MVC 还是 WebFlux&#xff1f;6. 并发模型7. webflux使用8. 测试 1. 前言 Spring 提供了两个并行堆栈。一种是基于带有 Spring MVC 和 Spring Data 结构的 …

Spring Webflux - 01 MVC的困境

文章目录 Spring MVC的困境Servlet 异步请求缓解线程池压力Servlet 3.0 异步请求处理Code 演示工程pom配置文件启动类同步servlet演示 异步servlet辅助Code演示 Tomcat 请求处理流程以及异步请求工作原理 Spring MVC的困境 我们先看一段工作中大家常见的代码 RestController …

WebFlux的使用

什么是WebFlux springWebFlux 是 SpringFrameworlk5.0 添加的新功能&#xff0c;它是完全非阻塞的&#xff0c;支持Reactive Stream及背压&#xff0c;可以运行于Netty、Undertow等服务器&#xff0c;及Servlet 3.1容器。 webflux主要在如下两方面体现出独有的优势&#xff1a;…

webFlux入门

今天发现一个特别好的文章&#xff0c;是关于springBoot框架中响应式编程的&#xff0c;那下面就是这位博主所整理的一些干货&#x1f447; ------------------------------------------------------------ 1. WebFlux介绍 Spring WebFlux 是 Spring Framework 5.0中引入的新…

WebFlux 简介

目录 一、关于WebFlux 二、SpringMVC与SpringWebFlux 三、Reactive Spring Web HttpHandler WebHandler 四、实现WebFlux 实例 基于Annotated Controller方式实现 WebFluxConfig配置&#xff1a; Controller: Main方法&#xff1a; 函数式编程方式 集成Thymeleaf sp…

Spring Webflux 响应式编程 (二) - WebFlux编程实战

第一章 Reactive Stream 第1节 jdk9的响应式流 就是reactive stream&#xff0c;也就是flow。其实和jdk8的stream没有一点关系。说白了就一个发布-订阅模式&#xff0c;一共只有4个接口&#xff0c;3个对象&#xff0c;非常简单清晰。 什么是背压&#xff1f; 背压是指订阅者…

WebFlux 详解

今天我们开始来学习下 WebFlux&#xff0c;为什么突然要学这个东西&#xff1f; 因为我之前是想学习 Spring Cloud Gateway 来着&#xff0c;然后发现它是基于 Spring5.0SpringBoot2.0WebFlux等技术开发的。所以学之前才要来简单了解下 WebFlux 技术。 然后要学习 WebFlux 时…

Redis常用数据类型及其对应的底层数据结构

Redis数据库 Redis是一种键值(Key-Value)数据库。相较于MySQL之类的关系型数据库&#xff0c;Redis是一种非关系型数据库。Redis存储的数据只包含键和值两部分&#xff0c;只能通过键来查询值。这样简单的存储结构&#xff0c;能让Redis的读写效率非常高(HashMap读写效率都是O…

二. Redis 数据类型

2.1 Redis 字符串 (String) 2.1.1 概述 String 是 Redis 最基本的类型&#xff0c;你可以理解成与 Memcached 一模一样的类型&#xff0c;一个 key 对应一个 value。 String 类型是二进制安全的。意味着 Redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象。 …

Redis数据类型Hash

文章目录 Hash类型介绍hash 类型数据的基本操作 hash 类型数据操作的注意事项Hash和String类型的区别 有时候我们往往不是在缓存中存一个值&#xff0c;而是选择存一个对象&#xff0c;比如一个购物车消息&#xff0c;我们就需要使用到hash了 Hash类型介绍 新的存储需求&…

Redis数据类型String

文章目录 数据存储类型介绍String类型String类型的基本操作String单数据操作和多数据操作的选择问题string 类型数据的扩展操作数据增加指定范围的值String 设置数据指定的生命周期string 类型数据操作的注意事项 数据存储类型介绍 常用的五个数据类型: string --------------…