最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Spring Boot2中使用CompletableFuture的方法教程

 更新時間:2019年01月04日 11:23:54   作者:banq  
這篇文章主要給大家介紹了關(guān)于在Spring Boot2中使用CompletableFuture的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧

前言

在Spring Boot中有一個注釋@Async,可以幫助開發(fā)人員開發(fā)并發(fā)應(yīng)用程序。但使用此功能非常棘手。在本博客中,我們將了解如何將此功能與CompletableFuture一起使用。我認(rèn)為你已經(jīng)知道關(guān)于CompletableFuture的基礎(chǔ),所以我不會在這里重復(fù)這個概念。

首先,您需要使用@EnableAsync來注釋您的應(yīng)用程序類,這個注釋告訴Spring查找使用@Async注釋的方法并在單獨的執(zhí)行程序中運行它們。

@SpringBootApplication
@EnableAsync
public class App {
 RestTemplate
 public static void main(String[] args) {
  SpringApplication.run(App.class, args);
 }
}

如果您查看有關(guān)使用CompletableFuture和@Async的Spring Boot示例,您會注意到他們使用此功能的方式基于REST請求,在我看來,我相信,它有點受限,它不會給你在其他情況下如何使用此功能的線索。例如,如果你有一個長期運行的任務(wù),你會怎么做?

// Source : https://spring.io/guides/gs/async-method/
package hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.concurrent.CompletableFuture;

@Service
public class GitHubLookupService {

  private static final Logger logger = LoggerFactory.getLogger(GitHubLookupService.class);

  private final RestTemplate restTemplate;

  public GitHubLookupService(RestTemplateBuilder restTemplateBuilder) {
    this.restTemplate = restTemplateBuilder.build();
  }

  @Async
  public CompletableFuture<User> findUser(String user) throws InterruptedException {
    logger.info("Looking up " + user);
    String url = String.format("https://api.github.com/users/%s", user);
    User results = restTemplate.getForObject(url, User.class);
    // Artificial delay of 1s for demonstration purposes
    Thread.sleep(1000L);
    return CompletableFuture.completedFuture(results);
  }

}

在FindUser(String user)中,它在主線程中使用CompletableFuture,此方法的主要任務(wù)是使用RestTemplate從github獲取數(shù)據(jù),功能是“執(zhí)行HTTP請求的同步客戶端”。如何使用長時間運行的任務(wù),如調(diào)用網(wǎng)絡(luò)功能,如從REST端點ping服務(wù)器?在這種情況下,您需要定制CompletableFuture。你不能簡單地調(diào)用:

return CompletableFuture.completedFuture(results);

如何使用CompletableFuture

要在代碼中使用@Async,您的方法必須返回Future或CompletableFuture,看一下下面的例子:

@Async
  public CompletableFuture<Boolean> isServerAlive(String ip) {
    CompletableFuture<Boolean> future = new CompletableFuture<Boolean>(){
      @Override
      public Boolean get() throws InterruptedException, ExecutionException {
        InetAddress address = null;
        try {
          address = InetAddress.getByName(ip);
          return address.isReachable(1000);
        } catch (UnknownHostException e) {
          e.printStackTrace();
          return false;
        } catch (IOException e) {
          e.printStackTrace();
          return false;
        }
      }
    };
    return future;
}

在這個例子中,我重寫了get()方法并返回CompletableFuture而沒有任何線程執(zhí)行器,事實上我們要求Spring在不同的線程中執(zhí)行@Async方法,但是我們不提供任何線程執(zhí)行器,只有后臺工作者中運行就足夠了。

download source code from github (本地下載

注意:在這個例子中,我決定在Spring Boot中使用一個網(wǎng)絡(luò)函數(shù),僅僅是為了一個參數(shù)。但最好不要在REST端點中直接使用網(wǎng)絡(luò)功能,特別是當(dāng)您希望立即獲得結(jié)果時。原因是:網(wǎng)絡(luò)功能是阻塞的,這意味著,如果你調(diào)用這個REST端點,您必須在端點等待獲取結(jié)果。強烈建議使用其他方法(如queue或push方法)(例如websocket)來調(diào)用阻塞函數(shù)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java簡單幾步實現(xiàn)一個二叉搜索樹

    Java簡單幾步實現(xiàn)一個二叉搜索樹

    二叉樹包含了根節(jié)點,孩子節(jié)點,葉節(jié)點,每一個二叉樹只有一個根節(jié)點,每一個結(jié)點最多只有兩個節(jié)點,左子樹的鍵值小于根的鍵值,右子樹的鍵值大于根的鍵值,下面這篇文章主要給大家介紹了關(guān)于如何在Java中實現(xiàn)二叉搜索樹的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 使用controller傳boolean形式值

    使用controller傳boolean形式值

    這篇文章主要介紹了使用controller傳boolean形式值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • mybatis insert foreach循環(huán)插入方式

    mybatis insert foreach循環(huán)插入方式

    這篇文章主要介紹了mybatis insert foreach循環(huán)插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java如何將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫

    Java如何將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Java將Excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java日常練習(xí)題,每天進(jìn)步一點點(53)

    Java日常練習(xí)題,每天進(jìn)步一點點(53)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Java 處理超大數(shù)類型之BigInteger案例詳解

    Java 處理超大數(shù)類型之BigInteger案例詳解

    這篇文章主要介紹了Java 處理超大數(shù)類型之BigInteger案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Spring MVC 文件上傳的示例代碼

    Spring MVC 文件上傳的示例代碼

    本篇文章主要介紹了Spring MVC 文件上傳的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 使用Java生成32位16進(jìn)制密鑰的代碼實現(xiàn)

    使用Java生成32位16進(jìn)制密鑰的代碼實現(xiàn)

    在許多加密和安全應(yīng)用中,生成隨機的密鑰是至關(guān)重要的一步,密鑰通常以16進(jìn)制形式表示,并且具有特定的長度,在這篇博客中,我們將探討如何使用Java生成一個32位長度的16進(jìn)制密鑰,并展示詳細(xì)的代碼示例和運行結(jié)果,需要的朋友可以參考下
    2024-08-08
  • 詳解Java如何實現(xiàn)圖像灰度化

    詳解Java如何實現(xiàn)圖像灰度化

    這篇文章主要介紹了灰度化的幾種方法,以及如何使用Java實現(xiàn)灰度化。同時分析了網(wǎng)上一種常見卻并不妥當(dāng)?shù)腏ava灰度化實現(xiàn),以及證明了opencv的灰度化是使用“加權(quán)灰度化”法,下面一起來看看。
    2016-08-08
  • Java復(fù)雜鏈表的復(fù)制詳解

    Java復(fù)雜鏈表的復(fù)制詳解

    復(fù)雜鏈表指的是一個鏈表有若干個結(jié)點,每個結(jié)點有一個數(shù)據(jù)域用于存放數(shù)據(jù),還有兩個指針域,其中一個指向下一個節(jié)點,還有一個隨機指向當(dāng)前復(fù)雜鏈表中的任意一個節(jié)點或者是一個空結(jié)點,我們來探究一下在Java中復(fù)雜鏈表的復(fù)制
    2022-01-01

最新評論

孝感市| 周至县| 元阳县| 茂名市| 涟水县| 珲春市| 梨树县| 喀什市| 钟山县| 西昌市| 图木舒克市| 芜湖市| 铜陵市| 陆丰市| 磐石市| 武鸣县| 呼图壁县| 万宁市| 肥东县| 独山县| 台山市| 正定县| 灵寿县| 新兴县| 卢氏县| 香港| 类乌齐县| 西畴县| 庆安县| 莎车县| 襄城县| 含山县| 尖扎县| 曲靖市| 资中县| 滕州市| 赣州市| 清水县| 柳林县| 屏南县| 南靖县|