欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot深入分析webmvc和webflux的區(qū)別

 更新時間:2023年02月02日 15:42:36   作者:ldcaws  
這篇文章主要介紹了SpringBoot深入分析webmvc和webflux的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

webmvc和webflux作為spring framework的兩個重要模塊,代表了兩個IO模型,阻塞式和非阻塞式。

1、webmvc

webmvc是基于servlet的阻塞式模型,一個請求到達服務器后會單獨分配一個線程去處理請求,如果請求包含IO操作,線程在IO操作結束之前一直處于阻塞等待狀態(tài),這樣線程在等待IO操作結束的時間就浪費了。

2、webflux

webflux是一個異步非阻塞式的 Web 框架,它能夠充分利用多核 CPU 的硬件資源去處理大量的并發(fā)請求。

webflux內部使用的是響應式編程(Reactive Programming),以 Reactor 庫為基礎,基于異步和事件驅動,可以讓我們在不擴充硬件資源的前提下,提升系統(tǒng)的吞吐量和伸縮性。

Reactor 是一個反應式庫,用于根據反應式流規(guī)范在 JVM 上構建非阻塞應用。它是完全非阻塞的,支持在 Netty,Undertow 和 Servlet 3.1+容器等服務器上運行。

Reactor 項目提供兩種類型的發(fā)布者:

  • Flux 是產生 0 到 N 個值的發(fā)布者,返回多個元素的操作使用此類型;
  • Mono 是產生 0 到 1 值的發(fā)布者,它用于返回單個元素的操作;

3、webflux實例

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

添加controller

@Slf4j
@RestController
@RequestMapping("/api/user")
public class UserReactiveController {
    @RequestMapping(value = "/hello")
    public Mono<Object> hello(@RequestParam(name = "name") String name) {
        log.info("方法 hello 被調用了");
        return Mono.just("hello webflux " + name);
    }
}

測試

4、小結

  • WebFlux 并不能使接口的響應時間縮短,它僅僅能夠提升吞吐量和伸縮性;
  • WebFlux內部使用的是響應式編程,以Reactor庫為基礎,基于異步和事件驅動,特別適合應用在IO密集型的服務中,如網關;
  • WebFlux并不是Spring MVC的替代方案;
  • WebFlux默認情況下使用Netty作為服務器,不支持MySQL;
  • WebFlux的前端控制器是DispatcherHandler,而Spring MVC是DispatcherServlet;
  • WebFlux支持兩種編程風格,一種是Spring MVC的注解形式,另一種就是Java 8 Lambda函數式編程;
  • Reactor類型:Mono返回0或者1個元素,即單個對象;Flux返回N個元素,即List列表對象;
  • Webflux中沒有攔截器這個概念,要做類似的工作需要在過濾器中完成,項目中我們用到Token驗證,使用方法是注冊過濾器;
  • Webflux中可以使用@ControllerAdvice注冊全局異常處理器,但它僅Controller中拋出的異常生效,無法顧及到過濾器。對異常,推薦的方式是注冊WebExceptionHandler;

到此這篇關于SpringBoot深入分析webmvc和webflux的區(qū)別的文章就介紹到這了,更多相關SpringBoot webmvc和webflux內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA collection集合之撲克牌游戲實例

    JAVA collection集合之撲克牌游戲實例

    本篇文章主要介紹了JAVA collection集合之撲克牌游戲實例,使用了collection集合開發(fā)小游戲,有需要的可以了解一下。
    2016-11-11
  • java 判斷字符串中是否有重復字符的示例

    java 判斷字符串中是否有重復字符的示例

    今天小編就為大家分享一篇java 判斷字符串中是否有重復字符的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • gradle安裝和環(huán)境配置全過程

    gradle安裝和環(huán)境配置全過程

    本文介紹了如何安裝和配置Gradle環(huán)境,包括下載Gradle、配置環(huán)境變量、測試Gradle以及在IntelliJ IDEA中配置Gradle
    2025-01-01
  • 使用Java構造和解析Json數據的兩種方法(詳解二)

    使用Java構造和解析Json數據的兩種方法(詳解二)

    這篇文章主要介紹了使用Java構造和解析Json數據的兩種方法(詳解二)的相關資料,需要的朋友可以參考下
    2016-03-03
  • SpringBoot 內嵌 camunda的配置方法

    SpringBoot 內嵌 camunda的配置方法

    Camunda是一個基于Java的框架,支持用于工作流和流程自動化的BPMN、用于案例管理的CMMN和用于業(yè)務決策管理的DMN,這篇文章主要介紹了SpringBoot 內嵌 camunda,需要的朋友可以參考下
    2024-06-06
  • Java 中運行字符串表達式的方法

    Java 中運行字符串表達式的方法

    這篇文章主要介紹了Java 中運行字符串表達式的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • java動態(tài)加載插件化編程詳解

    java動態(tài)加載插件化編程詳解

    這篇文章主要介紹了java動態(tài)加載插件化編程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • SpringBoot集成Redis及Redis使用方法

    SpringBoot集成Redis及Redis使用方法

    Redis是現在最受歡迎的NoSQL數據庫之一,Redis是一個使用ANSI C編寫的開源、包含多種數據結構、支持網絡、基于內存、可選持久性的鍵值對存儲數據庫,這篇文章主要介紹了SpringBoot集成Redis及Redis使用方法,需要的朋友可以參考下
    2023-08-08
  • 一文帶你掌握Java開發(fā)者如何接入并使用DeepSeek

    一文帶你掌握Java開發(fā)者如何接入并使用DeepSeek

    對于Java開發(fā)者來說,將DeepSeek集成到項目中,可以極大地提升數據處理和分析的效率,下面小編就來為大家介紹一下具體的調用方法吧
    2025-03-03
  • eclipse中沒有SERVER的解決辦法(超詳細)

    eclipse中沒有SERVER的解決辦法(超詳細)

    使用eclipse進行tomcat配置時,經常會發(fā)現一個重要的問題就是打開eclipse之后沒有了server選項,所以本給大家詳細介紹了eclipse中沒有SERVER的解決辦法,文中有詳細的圖文講解,需要的朋友可以參考下
    2023-12-12

最新評論