私は2つのクラスでSpring @Asyncを使用しています。どちらも最終的にインターフェースを実装しています。私は2つの別々のThreadPoolTaskExecutorを作成しているので、各クラスには独自のThreadPoolが用意されています。しかし、私はプロキシで何かを考え、SpringがAsyncクラスを実装する方法を考えるので、@Asyncアノテーションをベースインターフェイスに配置する必要があります。このため、両方のクラスは同じThreadPoolTaskExecutorを使用して終了します。 このBean(この場合は、そのインタフェースを実装するクラスを呼び出して呼び出しています)に対して、このThreadPoolTaskExecutorを使用してSpringに伝えることは可能ですか?Async Spring用に複数のthreadPoolExecutorを使用する方法
2
A
答えて
3
デフォルトでは、@Async
をメソッドに指定する場合、使用されるエグゼキュータは、hereのように '注釈駆動型'要素に提供されるものです。
ただし、特定のメソッドを実行するときにデフォルト以外のエグゼキュータを使用する必要がある場合には、@Async
アノテーションのvalue属性を使用できます。この場合
@Async("otherExecutor")
void doSomething(String s) {
// this will be executed asynchronously by "otherExecutor"
}
、「otherExecutor」Springコンテナ内の任意の執行Beanの名前であってもよいし、例えば任意の執行、関連付けられた修飾子の名前であってもよいです要素やSpringの@Qualifier
アノテーションで指定されているよう
https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
そして、おそらくあなたが望むプールの設定とアプリあなたにotherExecutor Beanを指定する必要があります。
@Bean
public TaskExecutor otherExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
return executor;
}
関連する問題
- 1. 複数のクエリにasync parallelを使用する方法
- 2. Springの@Asyncメソッドで現在のロケールを使用する方法
- 3. @EventListener、Springで@Asyncを使用する
- 4. jdbc接続プールSpring起動時にThreadpoolExecutorを使用
- 5. 複数の関連するコレクションでasync/awaitを使用する方法
- 6. 複数のJdbcOperationsと複数のJdbcTemplatesをSpringで使用する方法
- 7. observableを使用してRxJavaを使用してサービスクラスに複数のリクエストを送信する方法Spring Mvc
- 8. spring-kafkaを使用してリスナー用に複数のブートストラップサーバーを渡す方法
- 9. 同じasync関数/タイマーリセットで複数のsetTimeoutを使用する
- 10. AsyncメソッドでのSpring AOPの使用
- 11. JavaでThreadPoolExecutorを使用してRejectedExecutionExceptionを処理する方法
- 12. spring複数のテストに1つのWeb環境を使用する方法
- 13. Java5でThreadPoolExecutor内のコアスレッドにタイムアウトを適用する方法
- 14. Springデータ内の複数のデータソースSpringブートを使用するJPA
- 15. 複数テーブルを使用する方法
- 16. Springセキュリティを使用して複数のログインをブロックする方法は?
- 17. Spring SimpleCacheManagerを使用して複数のリストをキャッシュする方法は?
- 18. 複数のCommandLineRunnerを使用してSpringブートアプリケーションを実行する方法
- 19. SpringデータストアRedis - 複数のキャッシュを使用
- 20. nodejsを使用してコールバックにasyncを使用する方法は?
- 21. 複数のSpring Eurekaディスカバリサービスの使用
- 22. async http.getデータリクエストに* ngIfを使用する方法 - 角度2
- 23. async forEach要求に$ q.allを使用する方法は?
- 24. async sinatraを使用したストリームの複数のボディ
- 25. 複数の画像にjQuery関数を使用する方法
- 26. 複数のサブクラスを関数パラメータに使用する方法
- 27. Java SpringのThreadPoolExecutorの制御
- 28. Spring - TransactionSynchronizationManagerを使用するテスト方法
- 29. 1つのタグに複数の「if」を使用する方法
- 30. 複数のコントローラに1つのモジュールを使用する方法
修飾子を使用しても、実装されたクラスはどのTaskExecutorを使用するかを知ることができます。 TaskExecutorのインタフェースレベルで「名前」または「修飾子」を1つだけ指定することにより、両方のクラスメソッドが呼び出されると、同じTaskExecutorが呼び出されます。理想的には、実装されたクラスで非同期を定義することですが、この場合は期待通りに動作しません – Kirit
いいえ、実装クラスにアノテーションを入れない理由は何ですか?もちろん、余分なコーディングでそれを行うことはできますが、私はそれについて何の理由も見ません。これはどういう意味ですか?「プロキシを使って何かを考えて、SpringがAsyncクラスを実装する方法のために、@Asyncアノテーションをベースインターフェイスに配置する必要があります。 – Imran
私のミス@Imran、私はimplementaitonクラスでそれを置くことができますが、私はそれも私が望んだThreadPoolを呼び出していたことに気づいた。私はなぜ思った。私はいくつかのメソッドを実装した中で抽象クラスを持っていました。 super.method()を呼び出すだけでも、最後に実装されたクラスがこれらのメソッドをオーバーライドしない限り、指定されたクラスの代わりにデフォルトのプールが使用されます。ありがとう – Kirit