クラス SimpleAsyncTaskScheduler

実装されたすべてのインターフェース:
SerializableSEAutoCloseableSEExecutorSEEventListenerSEAwareApplicationContextAwareApplicationListener<ContextClosedEvent>LifecyclePhasedSmartLifecycleAsyncListenableTaskExecutorAsyncTaskExecutorTaskExecutorTaskScheduler

Spring の TaskScheduler インターフェースの単純な実装。単一のスケジューラスレッドを使用し、スケジュールされたすべてのタスクを個別のスレッドで実行します。これは、setVirtualThreads(true) での一般的な使用を想定しており、JDK 21 の仮想スレッドでは魅力的な選択肢です。

注: 従来の固定遅延セマンティクスを提供するために、固定遅延を使用してスケジュールすると、単一のスケジューラースレッドでの実行が強制されます。代わりに、このタスクごとのスレッドスケジューラのバリアントに適した固定レートまたは cron トリガーを使用することをお勧めします。

実行時の実行スレッドごとのタスク追跡オーバーヘッドを犠牲にして、SimpleAsyncTaskExecutor.setTaskTerminationTimeout(long) による正常なシャットダウンをサポートします。SimpleAsyncTaskExecutor.setConcurrencyLimit(int) による同時スレッドの制限をサポートします。デフォルトでは、タスクの同時実行数は無制限です。これにより、固定プールサイズを必要とする ThreadPoolTaskScheduler とは対照的に、スケジュールされたタスク実行の動的な同時実行が可能になります。

注: この実装ではスレッドを再利用しません。特に多数の短期間のタスクをスケジュールする場合は、代わりにスレッドプーリング TaskScheduler 実装を検討してください。あるいは、JDK 21 では、SimpleAsyncTaskExecutor.setVirtualThreads(boolean) を true に設定することを検討してください。

SimpleAsyncTaskExecutor を拡張し、SimpleAsyncTaskExecutor を完全に置き換えることができます。たとえば、単一の共有インスタンスとして TaskExecutorTaskScheduler を兼ねることができます。これは一般的に、スケジューラスレッドプールに特定の制約を持つ傾向がある他のエクゼキュータ / スケジューラ実装の場合ではなく、実際には一般的なエクゼキュータの目的のために別のスレッドプールを必要とします。

注意: このスケジューラバリアントは、タスクの実際の補完を追跡するのではなく、実行スレッドへのハンドオフのみを追跡します。その結果、ScheduledFutureSE ハンドル (例: schedule(Runnable, Instant) から) は、提供されたタスク (または一連の繰り返しタスク) の実際の補完ではなく、そのハンドオフを表します。

組み込みのタスクごとのスレッド機能の代替として、このスケジューラは、setTargetTaskExecutor(java.util.concurrent.Executor) を介してスケジュールされたタスクを実行するための別のターゲットエグゼキュータを使用して構成することもできます。共有 ThreadPoolTaskExecutor Bean を指します。これは、ThreadPoolTaskScheduler セットアップとは依然としてかなり異なります。これは、動的コア / 最大プールサイズ範囲を持つ可能性のあるターゲットスレッドプールに動的にディスパッチする間、常に単一のスケジューラスレッドを使用し、共有同時実行制限に参加するためです。

導入:
6.1
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • SimpleAsyncTaskScheduler

      public SimpleAsyncTaskScheduler()
  • メソッドの詳細

    • setClock

      public void setClock(ClockSE clock)
      スケジューリングの目的で使用する監視を設定します。

      デフォルトのクロックは、デフォルトのタイムゾーンのシステムクロックです。

      関連事項:
    • getClock

      public ClockSE getClock()
      インターフェースからコピーされた説明: TaskScheduler
      スケジューリングの目的で使用する監視を返します。
      次で指定:
      インターフェース TaskSchedulergetClock 
      関連事項:
    • setPhase

      public void setPhase(int phase)
      このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。デフォルトは SmartLifecycle.DEFAULT_PHASE です。
      関連事項:
    • getPhase

      public int getPhase()
      このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。
      次で指定:
      インターフェース PhasedgetPhase 
      次で指定:
      インターフェース SmartLifecyclegetPhase 
      関連事項:
    • setTargetTaskExecutor

      public void setTargetTaskExecutor(ExecutorSE targetTaskExecutor)
      スケジュールされたタスクの個別の実行を委譲するカスタムターゲット ExecutorSE を指定します。たとえば、このスケジューラは単一のスケジューラスレッドを使用し続ける一方で、スケジュールされたタスクを実行するために別のスレッドプールに設定できます。

      設定されていない場合、通常の SimpleAsyncTaskExecutor 配置がタスクごとに新しいスレッドで開始されます。

    • setApplicationContext

      public void setApplicationContext(ApplicationContext applicationContext)
      インターフェースからコピーされた説明: ApplicationContextAware
      このオブジェクトが実行される ApplicationContext を設定します。通常、この呼び出しはオブジェクトの初期化に使用されます。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init メソッドなどの init コールバックの前に呼び出されます。ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) および MessageSourceAware の後に呼び出されます(該当する場合)。

      次で指定:
      インターフェース ApplicationContextAwaresetApplicationContext 
      パラメーター:
      applicationContext - このオブジェクトによって使用される ApplicationContext オブジェクト
      関連事項:
    • doExecute

      protected void doExecute(RunnableSE task)
      クラスからコピーされた説明: SimpleAsyncTaskExecutor
      タスクを実際に実行するためのテンプレートメソッド。

      デフォルトの実装では、新しいスレッドを作成して開始します。

      オーバーライド:
      クラス SimpleAsyncTaskExecutordoExecute 
      パラメーター:
      task - 実行する Runnable
      関連事項:
    • schedule

      @Nullable public ScheduledFutureSE<?> schedule(RunnableSE task, Trigger trigger)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールし、トリガーが次の実行時間を示すたびに呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerschedule 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      trigger - Trigger インターフェースの実装。cron 式をラップする CronTrigger オブジェクト
      戻り値:
      タスクの実行保留を表す ScheduledFutureSE、または指定されたトリガーオブジェクトが決して起動しない場合は null (つまり、Trigger.nextExecution(org.springframework.scheduling.TriggerContext) から null を返します)
      関連事項:
    • schedule

      public ScheduledFutureSE<?> schedule(RunnableSE task, InstantSE startTime)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールし、指定された実行時間に呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerschedule 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      startTime - タスクの望ましい実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)
      戻り値:
      タスクの保留中の実行を表す ScheduledFutureSE
    • scheduleAtFixedRate

      public ScheduledFutureSE<?> scheduleAtFixedRate(RunnableSE task, InstantSE startTime, DurationSE period)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、指定された期間で呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerscheduleAtFixedRate 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      startTime - タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)
      period - タスクの連続した実行の間隔
      戻り値:
      タスクの保留中の実行を表す ScheduledFutureSE
    • scheduleAtFixedRate

      public ScheduledFutureSE<?> scheduleAtFixedRate(RunnableSE task, DurationSE period)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールします。できるだけ早く開始し、指定された期間で呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerscheduleAtFixedRate 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      period - タスクの連続した実行の間隔
      戻り値:
      タスクの保留中の実行を表す ScheduledFutureSE
    • scheduleWithFixedDelay

      public ScheduledFutureSE<?> scheduleWithFixedDelay(RunnableSE task, InstantSE startTime, DurationSE delay)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールし、指定された実行時間に呼び出し、その後、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerscheduleWithFixedDelay 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      startTime - タスクに必要な最初の実行時間 (これが過去の場合、タスクはすぐに、つまりできるだけ早く実行されます)
      delay - ある実行の補完から次の実行の開始までの遅延
      戻り値:
      タスクの保留中の実行を表す ScheduledFutureSE
    • scheduleWithFixedDelay

      public ScheduledFutureSE<?> scheduleWithFixedDelay(RunnableSE task, DurationSE delay)
      インターフェースからコピーされた説明: TaskScheduler
      指定された RunnableSE をスケジュールします。できるだけ早く開始し、1 つの実行が完了してから次の実行が開始されるまでの間に指定された遅延で呼び出します。

      スケジューラがシャットダウンするか、返された ScheduledFutureSE がキャンセルされると、実行は終了します。

      次で指定:
      インターフェース TaskSchedulerscheduleWithFixedDelay 
      パラメーター:
      task - トリガーが起動するたびに実行する Runnable
      delay - ある実行の補完から次の実行の開始までの遅延
      戻り値:
      タスクの保留中の実行を表す ScheduledFutureSE
    • start

      public void start()
      インターフェースからコピーされた説明: Lifecycle
      このコンポーネントを起動します。

      コンポーネントがすでに実行されている場合は、例外をスローしないでください。

      コンテナーの場合、これは適用されるすべてのコンポーネントに開始信号を伝播します。

      次で指定:
      インターフェース Lifecyclestart 
      関連事項:
    • stop

      public void stop()
      インターフェースからコピーされた説明: Lifecycle
      このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycle とその stop(Runnable) バリアントの実装を検討してください。

      この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、Lifecycle Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止信号を事前に考慮することなく呼び出されます。

      コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。

      コンテナーの場合、これは停止信号を適用するすべてのコンポーネントに伝播します。

      次で指定:
      インターフェース Lifecyclestop 
      関連事項:
    • stop

      public void stop(RunnableSE callback)
      インターフェースからコピーされた説明: SmartLifecycle
      Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。

      提供されたコールバックは、LifecycleProcessor によって使用され、共通のシャットダウン順序値を持つすべてのコンポーネントの順序付けられた、潜在的に同時のシャットダウンをサポートします。コールバック は、SmartLifecycle コンポーネントが実際に停止した後に実行する必要があります。

      LifecycleProcessor は、stop メソッドのこのバリアントのみを呼び出します。つまり、SmartLifecycle 実装では、このメソッドの実装内に明示的に委譲されない限り、Lifecycle.stop() は呼び出されません。

      デフォルトの実装は Lifecycle.stop() に委譲し、呼び出しスレッドで指定されたコールバックをすぐにトリガーします。2 つの間に同期がないことに注意してください。カスタム実装では、少なくとも共通のライフサイクルモニター(存在する場合)内に同じ手順を入れたい場合があります。

      次で指定:
      インターフェース SmartLifecyclestop 
      関連事項:
    • isRunning

      public boolean isRunning()
      インターフェースからコピーされた説明: Lifecycle
      このコンポーネントが現在実行されているかどうかを確認します。

      コンテナーの場合、これは、適用されるすべてのコンポーネントが現在実行されている場合にのみ、true を返します。

      次で指定:
      インターフェース LifecycleisRunning 
      戻り値:
      コンポーネントが現在実行中かどうか
    • onApplicationEvent

      public void onApplicationEvent(ContextClosedEvent event)
      インターフェースからコピーされた説明: ApplicationListener
      アプリケーションイベントを処理します。
      次で指定:
      インターフェース ApplicationListener<ContextClosedEvent>onApplicationEvent 
      パラメーター:
      event - 応答するイベント
    • close

      public void close()
      クラスからコピーされた説明: SimpleAsyncTaskExecutor
      この close メソッドは、具体的な task termination timeout が設定されている場合、アクティブなスレッドの終了を追跡します。それ以外の場合、このエグゼキュータを閉じる必要はありません。
      次で指定:
      インターフェース AutoCloseableSEclose 
      オーバーライド:
      クラス SimpleAsyncTaskExecutorclose