非同期コントローラの抽象スーパークラスのメソッドに取り組んでいません

ディリップラジBARAL:

私が持っているBaseRestController残りのコントローラが拡張するクラスを。それは私が非同期的に実行したいメソッドを持っています。

public abstract class BaseRestController {
    ...

    @Async("someThreadPoolTaskExecutor")
    public void someAsyncTask() {
        ...
    }

}
@RestController
public class MyRestController extends BaseRestController {
    ...

    @GetMapping("/some/path")
    public SomeEntity getSomething() {
        ...
        this.someAsyncTask();
    }        
}

私が有効になっているAsync取得するメソッド実装され、注釈を使用してsomeThreadPoolTaskExecutor のTaskExecutorし、すべてを。私が入れた場合は@Async("someThreadPoolTaskExecutor")サービスの(と注釈付きクラス上@Service)メソッド、それは動作しますが、私がそうするならばsomeAsyncTask()BaseRestControllerコードは非同期で実行されません。持つクラスを飾る@Componentはどちらか動作しませんでした。

非同期のスプリングガイドは、どちらかの助けにはなりませんでした。それのデモでは、それはまた、実証非同期のサービスクラスで。

プロセスでは、私が実装したかった行動があったことを実現し、一方でサービスクラスに委譲し、より良いオフ、なぜ上記の意志ではない仕事を理解するためとして、私は好奇心旺盛です。

私が使用しています2.1.0.RELEASE春ブーツのを。

デッドプール :

以下のためのルールがいくつかあります@Async、あなたは動作しません自己呼び出しやっているここでは、

  • それはパブリックメソッドのみに適用されなければなりません
  • 自己呼び出し - 同じクラス内から非同期メソッドを呼び出す - 動作しません。

理由は単純です-この方法は、それがプロキシすることができ、公共そうする必要があります。それはプロキシをバイパスするため、自己の呼び出しは動作しませんし、直接基本となるメソッドを呼び出します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223009&siteId=1