私はREST
ウェブサービスを持っており、着信と発信のXML
リクエストをログに記録します。 非常に大きくて、何らかの変換を適用する必要があるので、私は非同期スレッドでそれを実行したいと思います。非同期ロギングに使用するTaskExecutorはどれですか?
これまでのところ、私はloggerメソッドで@Async
アノテーションを使用しています。 https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#scheduling-task-executor-types
質問:私はより良いではなく、デフォルトの単純な実行者に頼るよりも、自分自身のThreadPoolTaskExecutor
を定義する必要があること「とは、任意のスレッドを再利用していない」デフォルトSimpleAsyncTaskExecutor
を、使用しますか?短寿命のロギングタスクに「再利用スレッド」エグゼキュータを持つことは賢明でしょうか?
さらに検討する:私はまた、@Async
を使用して実行する必要があります、おそらく同じエグゼキュータを使用して、いくつかの非同期データベース行の更新があるでしょう。
私の主な問題は、スレッド、容量、スロットル制限などの固定プールサイズについて考えたくありません。「非同期スレッドで次のロジックを実行してください」と伝えるだけです。そして、それに何かを積み重ねてください。
TaskExecutors
のどれを使用する必要がありますか。どの設定を適用する必要がありますか?
たとえば、次のエグゼキュータは適合しますか?あなたの問題に合ったThreadPoolTaskExecutor
@Bean
public ThreadPoolTaskExecutor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
return executor;
}
プロセッサに「corePoolSize」または「maxPoolSize」を設定する必要がありますか?または両方? – membersound
maxPoolSize。FixedThreadPoolとして扱わない場合は、両方の値を設定します。 –
そして、もし私が 'corePoolSize = 1'で始めるなら、いつそれを増やすのですか? 1つのプロセスがまだ進行中の場合したがって、4つの同時ログ・ステートメントがある場合、4つのコア/スレッドで直接ログに記録されますか?または、プールのキューがいっぱいになった場合にのみpoolSizeが増加するため、それらはpool1のキューにスタックされますか? (そして、ThreadPoolTaskExecutorのデフォルトでキューは無限になっていますか?) – membersound