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

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

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

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

1、webmvc

webmvc是基于servlet的阻塞式模型,一個(gè)請(qǐng)求到達(dá)服務(wù)器后會(huì)單獨(dú)分配一個(gè)線程去處理請(qǐng)求,如果請(qǐng)求包含IO操作,線程在IO操作結(jié)束之前一直處于阻塞等待狀態(tài),這樣線程在等待IO操作結(jié)束的時(shí)間就浪費(fèi)了。

2、webflux

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

webflux內(nèi)部使用的是響應(yīng)式編程(Reactive Programming),以 Reactor 庫為基礎(chǔ),基于異步和事件驅(qū)動(dòng),可以讓我們?cè)诓粩U(kuò)充硬件資源的前提下,提升系統(tǒng)的吞吐量和伸縮性。

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

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

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

3、webflux實(shí)例

添加依賴

<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 被調(diào)用了");
        return Mono.just("hello webflux " + name);
    }
}

測(cè)試

4、小結(jié)

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

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

  • java 判斷字符串中是否有重復(fù)字符的示例

    java 判斷字符串中是否有重復(fù)字符的示例

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

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

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

    使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)

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

    SpringBoot 內(nèi)嵌 camunda的配置方法

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

    Java 中運(yùn)行字符串表達(dá)式的方法

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

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

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

    SpringBoot集成Redis及Redis使用方法

    Redis是現(xiàn)在最受歡迎的NoSQL數(shù)據(jù)庫之一,Redis是一個(gè)使用ANSI C編寫的開源、包含多種數(shù)據(jù)結(jié)構(gòu)、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久性的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫,這篇文章主要介紹了SpringBoot集成Redis及Redis使用方法,需要的朋友可以參考下
    2023-08-08
  • 一文帶你掌握J(rèn)ava開發(fā)者如何接入并使用DeepSeek

    一文帶你掌握J(rèn)ava開發(fā)者如何接入并使用DeepSeek

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

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

    使用eclipse進(jìn)行tomcat配置時(shí),經(jīng)常會(huì)發(fā)現(xiàn)一個(gè)重要的問題就是打開eclipse之后沒有了server選項(xiàng),所以本給大家詳細(xì)介紹了eclipse中沒有SERVER的解決辦法,文中有詳細(xì)的圖文講解,需要的朋友可以參考下
    2023-12-12
  • 最新評(píng)論