SpringBoot第18章:非同期タスク

著者:1819ドリーム
:オリジナルhttps://blog.csdn.net/weixin_39759846/article/details/93858446
著作権:この記事はブロガーのオリジナルの記事、再現され、ボーエンのリンクを添付してください!

 

入門

  非同期タスクのシステムは、例えば、多くの利点を有する:1下)のI / Oなど、非同期提供することができ、限定されるもの; 2)システムのロバスト性を向上させる; 3)ユーザ・エクスペリエンスを向上させます。

  2)プログラミング、同期に関して、プログラミングの難しさを増加させ、システムのパフォーマンスに影響を与えるだろう誤る1):しかし、例えばいくつかの欠点があります。

  この章の利点と非同期タスクの欠点は、あまりにも多くの業務システムに応じて決定されるように、非同期タスクを使用するかどうか、説明を行いません。唯一SpringBoot非同期タスクとこの章では扱っています。

 

バージョン情報

  • JDK:1.8

  • SpringBoot:2.1.4.RELEASE

  • Mavenの:3.3.9

  • IDEA:2019年1月1日

 

非同期タスク

  非同期タスクの使用については、それが結果は明らかではないかもしれません示しています。のは、いくつかの従来の方法を作成し、非同期作る、二つの結果の違いを見てみましょう。

最初のプロジェクト、ウェブのmaven-依存の導入を作成します。

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

 

その後、いくつかの一般的に使用されるメソッドを作成します。

package com.yanfei1819.asynctaskdemo.task;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * Created by 追梦1819 on 2019-06-21.
 */
@Component
public class AsyncTask {
    public void task01() throws InterruptedException {
        Long start = System.currentTimeMillis();
        System.out.println("这是第一个异步任务!");
        Thread.sleep(2000);
        Long end = System.currentTimeMillis();
        System.out.println("第一个任务执行时间是:"+(end-start));
    }
    public void task02() throws InterruptedException {
        Long start = System.currentTimeMillis();
        System.out.println("这是第二个异步任务!");
        Thread.sleep(3000);
        Long end = System.currentTimeMillis();
        System.out.println("第二个任务执行时间是:"+(end-start));
    }
    public void task03() throws InterruptedException {
        Long start = System.currentTimeMillis();
        System.out.println("这是第三个异步任务!");
        Thread.sleep(4000);
        Long end = System.currentTimeMillis();
        System.out.println("第三个任务执行时间是:"+(end-start));
    }
}

 

次のテストクラスを作成します。

package com.yanfei1819.asynctaskdemo.web.controller;

import com.yanfei1819.asynctaskdemo.task.AsyncTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by 追梦1819 on 2019-06-21.
 */
@RestController
public class TaskController {
    @Autowired
    private AsyncTask asyncTask;
    @GetMapping("/testTask")
    public void testTask() throws InterruptedException {
        Long start = System.currentTimeMillis();
        asyncTask.task01();
        asyncTask.task02();
        asyncTask.task03();
        Long end = System.currentTimeMillis();
        System.out.println("三个任务执行总时间是:"+(end-start));
    }
}

 

最後に訪問し、プロジェクトを開始し  localhost:8080/testTask 、以下の結果を:

これは明らかに非常に従来の同期方法です。ここでは、非同期処理のためにSpringBoot独自の非同期メソッドの実装を使用します。

 

我々は2つがある場所を変更する必要があります。

  1. また、クラスのノートを開始します  @EnableAsync 。
  2. 非同期メソッドに注釈を追加します  @Async

プロジェクト、同じパスへのアクセスを再起動し、以下の結果は以下のとおりです。

 

概要

  非同期タスクを使用すると、他の用途と同様に、非常に単純で、SpringBootはまた、我々は唯一のコメントを、それらのいくつかを使用する必要があり、春のエコシステムに統合されます。フォローアップは、その原則を分析します。

 

おすすめ

転載: blog.csdn.net/weixin_39759846/article/details/93858446