タスクの実行とスケジューリング
コンテキストに Executor
(標準 Javadoc) Bean がない場合、Spring Boot は AsyncTaskExecutor
(Javadoc) を自動構成します。仮想スレッドが有効になっている場合 ( Java 21+ を使用し、spring.threads.virtual.enabled
を true
に設定)、これは仮想スレッドを使用する SimpleAsyncTaskExecutor
(Javadoc) になります。それ以外の場合は、適切なデフォルトを持つ ThreadPoolTaskExecutor
(Javadoc) になります。どちらの場合でも、自動構成されたエグゼキュータは、次の場合に自動的に使用されます。
非同期タスクの実行 (
@EnableAsync
)Spring for GraphQL のコントローラーメソッドからの
Callable
(標準 Javadoc) 戻り値の非同期処理Spring MVC の非同期リクエスト処理
Spring WebFlux のブロッキング実行サポート
コンテキストでカスタム 自動構成された |
ThreadPoolTaskExecutor
(Javadoc) が自動構成されると、スレッドプールは負荷に応じて拡大および縮小できる 8 つのコアスレッドを使用します。これらのデフォルト設定は、次の例に示すように、spring.task.execution
名前空間を使用して微調整できます。
プロパティ
YAML
spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s
spring:
task:
execution:
pool:
max-size: 16
queue-capacity: 100
keep-alive: "10s"
これにより、キューがいっぱい(100 タスク)になったときにスレッドプールが最大 16 スレッドに増加するように、スレッドプールが制限キューを使用するように変更されます。プールの縮小は、スレッドが 10 秒間(デフォルトでは 60 秒ではなく)アイドル状態のときに回収されるため、より積極的です。
スケジュールされたタスクの実行に関連付ける必要がある場合 (たとえば、@EnableScheduling
(Javadoc) を使用)、スケジューラを自動構成することもできます。
仮想スレッドが有効になっている場合 (Java 21+ を使用し、spring.threads.virtual.enabled
を true
に設定)、これは仮想スレッドを使用する SimpleAsyncTaskScheduler
(Javadoc) になります。この SimpleAsyncTaskScheduler
(Javadoc) は、プール関連のプロパティをすべて無視します。
仮想スレッドが有効になっていない場合は、適切なデフォルトが設定された ThreadPoolTaskScheduler
(Javadoc) になります。ThreadPoolTaskScheduler
(Javadoc) はデフォルトで 1 つのスレッドを使用し、次の例に示すように、spring.task.scheduling
名前空間を使用して設定を微調整できます。
プロパティ
YAML
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
spring:
task:
scheduling:
thread-name-prefix: "scheduling-"
pool:
size: 2
カスタムエグゼキュータまたはスケジューラを作成する必要がある場合、コンテキストで ThreadPoolTaskExecutorBuilder
(Javadoc) Bean、SimpleAsyncTaskExecutorBuilder
(Javadoc) Bean、ThreadPoolTaskSchedulerBuilder
(Javadoc) Bean、SimpleAsyncTaskSchedulerBuilder
(Javadoc) が使用可能になります。SimpleAsyncTaskExecutorBuilder
(Javadoc) および SimpleAsyncTaskSchedulerBuilder
(Javadoc) Bean は、仮想スレッドが有効になっている場合 (Java 21+ および spring.threads.virtual.enabled
を true
に設定して使用)、仮想スレッドを使用するように自動的に構成されます。