28

Callable を使用して Spring で @Async および Servlet 3 非同期リクエスト実装を使用する一般的な使用例を知りたいです。

私が理解しているように、 @Async は任意のメソッド (具体的には任意のサービス メソッド) を非同期で実行するためのものです。

@Async
void doSomething(String s) {
// this will be executed asynchronously
}

および Callable を返す任意のコントローラー

  @RequestMapping("/view")
public Callable<String> callableWithView(final Model model) {
    return new Callable<String>() {
        @Override
        public String call() throws Exception {
            Thread.sleep(2000);
            model.addAttribute("foo", "bar");
            model.addAttribute("fruit", "apple");
            return "views/html";
        }
    };
}

いつ何を使うか迷っています。非同期サーブレット/コントローラーとスプリング @Async を一緒に使用すると、どのような影響がありますか?

4

2 に答える 2

26

この投稿には、探しているものの説明があります

抜粋:

場合によっては、バックグラウンド ジョブの処理が完了している間、すぐにクライアントに戻ることができます。たとえば、電子メールの送信、データベース ジョブの開始などは、Spring のサポートを使用するか、Spring Integration チャネルにイベントを投稿してから、クライアントがクエリに使用できる確認 ID を返す ことによって処理できるファイア アンド フォーゲット@Asyncシナリオを表します。結果のために。

呼び出し可能な戻り値の型は、コントローラー メソッドを非同期にします。これは通常、ロング ポーリングなどの状況で使用されます。詳細については、同じ著者によるこの投稿をお読みください。

また、callable は、ある意味で Runnable の代替であり、結果を返し、チェック済みの例外をスローできます。

メソッドがあると言う

public String aMethod(){

}

Callable インターフェイスを返すだけで、これを非同期にすることができます。

public Callable<String>  aMethod(){

}
于 2013-06-18T18:53:19.067 に答える
0

Callable インターフェイスを使用しても単一のリクエストのパフォーマンスを向上させることはできません。場合によっては、より多くのリクエストを取得するのに役立ちます。応答タイプが void になる場合は、callable の代わりに runnable を使用できるため、runnable を使用すると、単一要求の応答時間を改善できます。

于 2016-08-30T08:59:35.973 に答える