亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中DeferredResult異步處理

 更新時(shí)間:2023年12月06日 09:29:53   作者:檀越劍指大廠  
DeferredResult是Spring中處理異步請(qǐng)求的強(qiáng)大工具,可以幫助改善應(yīng)用程序的性能和用戶體驗(yàn),本文就來(lái)介紹一下Spring中DeferredResult異步處理,感興趣的可以了解一下

一.簡(jiǎn)單介紹

1.DeferredResult 簡(jiǎn)介

DeferredResult 是 Spring Framework 中用于異步處理請(qǐng)求的一種機(jī)制。它允許將處理結(jié)果推遲到稍后的時(shí)間點(diǎn),通常用于處理需要較長(zhǎng)時(shí)間完成的操作,例如異步任務(wù)、長(zhǎng)時(shí)間計(jì)算或外部服務(wù)調(diào)用。

2.功能和特性

  • 異步處理: DeferredResult 允許將請(qǐng)求的處理推遲到稍后的時(shí)間,允許應(yīng)用程序異步地處理請(qǐng)求。

  • 非阻塞: 使用 DeferredResult 不會(huì)阻塞容器線程,這有助于提高應(yīng)用程序的吞吐量。

  • 長(zhǎng)輪詢(xún): 可以使用 DeferredResult 實(shí)現(xiàn)長(zhǎng)輪詢(xún)(long polling)模式,其中客戶端發(fā)送請(qǐng)求并在服務(wù)器端保持掛起狀態(tài),直到有數(shù)據(jù)可用。

二.使用方式

1.Controller 中的方法

Controller 中的方法: 在控制器方法中,返回類(lèi)型可以是 DeferredResult<T>,其中 T 是要返回的數(shù)據(jù)類(lèi)型。

@GetMapping("/async-operation")
public DeferredResult<String> asyncOperation() {
    DeferredResult<String> deferredResult = new DeferredResult<>();

    // 在某個(gè)異步任務(wù)完成后,將結(jié)果設(shè)置到 DeferredResult 中
    asyncService.performAsyncOperation()
                .whenComplete((result, throwable) -> deferredResult.setResult(result));

    return deferredResult;
}

2.異步任務(wù)完成后設(shè)置結(jié)果

異步任務(wù)完成后設(shè)置結(jié)果: 在異步任務(wù)完成后,通過(guò) DeferredResult.setResult(result) 將結(jié)果設(shè)置到 DeferredResult 對(duì)象中。

public CompletableFuture<String> performAsyncOperation() {
    // 異步任務(wù)邏輯
    return CompletableFuture.supplyAsync(() -> "Async operation result");
}

3.自定義線程池

線程池:

public class ThreadPoolUntil {
    private static final int THREAD_POOL_SIZE = 10;
    private static ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);

    public static void executeTask(Runnable task) {
        executorService.submit(task);
    }

    public static void shutdown() {
        executorService.shutdown();
    }
}

controller:

@ApiOperation(value = "首頁(yè)-合計(jì)列表", nickname = "首頁(yè)-合計(jì)列表")
@PostMapping("/totalList")
public DeferredResult<Payload<List<TotalListDayDTO>>> totalList(@RequestBody TotalListQuery totalListQuery
        , @RequestHeader(value = "brandDetailNo") String brandDetailNo) {
      totalListQuery.setBrandDetailNo(brandDetailNo);
      DeferredResult<Payload<List<TotalListDayDTO>>> deferredResult = new DeferredResult<>(10000L);
      // 設(shè)置超時(shí)處理
      deferredResult.onTimeout(() -> deferredResult.setErrorResult(new Payload("504", "請(qǐng)求超時(shí)")));
      // 設(shè)置錯(cuò)誤處理
      deferredResult.onError((Throwable t) -> deferredResult.setErrorResult(new Payload("500", "系統(tǒng)錯(cuò)誤")));
      // 創(chuàng)建任務(wù)
      Runnable task = () -> deferredResult.setResult(new Payload(skuDataBusinessService.totalList(totalListQuery)));
      ThreadPoolUntil.executeTask(task);
      return deferredResult;
}

三.原理分析

1.Servlet 異步支持

Servlet 3.0+ 異步支持: DeferredResult 的實(shí)現(xiàn)依賴(lài)于 Servlet 3.0+ 的異步支持。在處理請(qǐng)求時(shí),容器會(huì)將請(qǐng)求轉(zhuǎn)交給異步處理,允許處理線程在異步操作完成前釋放。

2.DeferredResult 中介

DeferredResult 作為中介: DeferredResult 充當(dāng)控制器方法和異步任務(wù)之間的中介,使得控制器方法可以在異步任務(wù)完成后設(shè)置結(jié)果。

四.注意事項(xiàng)

1.超時(shí)處理

超時(shí)處理: 可以設(shè)置 DeferredResult 的超時(shí)時(shí)間,如果異步操作在超時(shí)時(shí)間內(nèi)未完成,可以通過(guò)設(shè)置超時(shí)處理邏輯來(lái)處理。

deferredResult.setTimeout(5000); // 設(shè)置超時(shí)時(shí)間為5秒
deferredResult.onTimeout(() -> {
    // 處理超時(shí)邏輯
    deferredResult.setErrorResult("Operation timed out");
});

2.異常處理

異常處理: 需要在異步任務(wù)中捕獲可能的異常,并在 DeferredResult 中設(shè)置錯(cuò)誤結(jié)果。

asyncService.performAsyncOperation()
            .whenComplete((result, throwable) -> {
                if (throwable != null) {
                    deferredResult.setErrorResult("An error occurred: " + throwable.getMessage());
                } else {
                    deferredResult.setResult(result);
                }
            });

3.不適用于所有場(chǎng)景

不適用于所有場(chǎng)景: DeferredResult 適用于長(zhǎng)時(shí)間運(yùn)行的操作,但并不是適用于所有場(chǎng)景。對(duì)于一些簡(jiǎn)單和快速的操作,同步處理可能更加合適。

總體而言,DeferredResult 是 Spring 中處理異步請(qǐng)求的強(qiáng)大工具,可以幫助改善應(yīng)用程序的性能和用戶體驗(yàn),特別是在需要處理長(zhǎng)時(shí)間運(yùn)行操作的情況下。

到此這篇關(guān)于Spring中DeferredResult異步處理的文章就介紹到這了,更多相關(guān)Spring DeferredResult異步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDK安裝方法和Linux常見(jiàn)設(shè)置詳細(xì)版教程

    JDK安裝方法和Linux常見(jiàn)設(shè)置詳細(xì)版教程

    這篇文章主要給大家介紹了關(guān)于JDK安裝方法和Linux常見(jiàn)設(shè)置的相關(guān)資料,文章詳細(xì)介紹了如何在Linux系統(tǒng)中設(shè)置靜態(tài)IP、用戶名和主機(jī)名,配置防火墻,安裝JDK以及如何創(chuàng)建系統(tǒng)快照,需要的朋友可以參考下
    2024-11-11
  • java根據(jù)List內(nèi)對(duì)象的屬性排序方法

    java根據(jù)List內(nèi)對(duì)象的屬性排序方法

    下面小編就為大家分享一篇java根據(jù)List內(nèi)對(duì)象的屬性排序方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 使用Java完成Socket文件傳輸方式

    使用Java完成Socket文件傳輸方式

    這篇文章主要介紹了使用Java完成Socket文件傳輸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java實(shí)現(xiàn)讀取txt文件中的內(nèi)容

    java實(shí)現(xiàn)讀取txt文件中的內(nèi)容

    本文通過(guò)一個(gè)具體的例子向大家展示了如何使用java實(shí)現(xiàn)讀取TXT文件里的內(nèi)容的方法以及思路,有需要的小伙伴可以參考下
    2016-03-03
  • Spring中的自動(dòng)裝配機(jī)制詳解

    Spring中的自動(dòng)裝配機(jī)制詳解

    這篇文章主要介紹了Spring中的自動(dòng)裝配機(jī)制詳解,自動(dòng)裝配就是會(huì)通過(guò)Spring的上下文為你找出相應(yīng)依賴(lài)項(xiàng)的類(lèi),通俗的說(shuō)就是Spring會(huì)在上下文中自動(dòng)查找,并自動(dòng)給Bean裝配與其相關(guān)的屬性,需要的朋友可以參考下
    2023-08-08
  • 輕松搞定SpringBoot JPA使用配置過(guò)程詳解

    輕松搞定SpringBoot JPA使用配置過(guò)程詳解

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,該框架使用了特定的方式來(lái)進(jìn)行配置,它默認(rèn)配置了很多框架的使用方式,就像 Maven整合了所有的Jar包,Spring Boot 整合了所有的框架
    2021-06-06
  • SpringBoot?@Transactional事務(wù)不生效排查方式

    SpringBoot?@Transactional事務(wù)不生效排查方式

    這篇文章主要介紹了SpringBoot?@Transactional事務(wù)不生效排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring?Boot中使用Spring?MVC的示例解析

    Spring?Boot中使用Spring?MVC的示例解析

    MVC?是一種常見(jiàn)的軟件設(shè)計(jì)模式,用于分離應(yīng)用程序的不同部分以實(shí)現(xiàn)松散耦合和高內(nèi)聚性,這篇文章主要介紹了如何在Spring?Boot中使用Spring?MVC,需要的朋友可以參考下
    2023-04-04
  • spring?cloud?gateway限流常見(jiàn)算法實(shí)現(xiàn)

    spring?cloud?gateway限流常見(jiàn)算法實(shí)現(xiàn)

    本文主要介紹了spring?cloud?gateway限流常見(jiàn)算法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 使用Java實(shí)現(xiàn)查找并移除字符串中的Emoji

    使用Java實(shí)現(xiàn)查找并移除字符串中的Emoji

    Emoji 實(shí)際上是 UTF-8 (Unicode) 字符集上的特殊字符,這篇文章主要介紹了如何使用Java實(shí)現(xiàn)查找并移除字符串中的Emoji,感興趣的可以了解下
    2024-03-03

最新評(píng)論