クラス ExecutorConfigurationSupport

実装されたすべてのインターフェース:
SerializableSEThreadFactorySEEventListenerSEAwareBeanNameAwareDisposableBeanInitializingBeanApplicationContextAwareApplicationListener<ContextClosedEvent>LifecyclePhasedSmartLifecycle
既知の直属サブクラス
ScheduledExecutorFactoryBeanThreadPoolExecutorFactoryBeanThreadPoolTaskExecutorThreadPoolTaskScheduler

ExecutorServiceSE(通常は ThreadPoolExecutorSE または ScheduledThreadPoolExecutorSE)をセットアップするための基本クラス。

CustomizableThreadCreator からスレッドのカスタマイズオプション (名前、優先順位など) を継承して、共通の構成設定と共通のライフサイクル処理を定義します。

導入:
3.0
作成者:
Juergen Hoeller
関連事項:
  • フィールドサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    実行者 SmartLifecycle のデフォルトフェーズ: Integer.MAX_VALUE / 2.
    protected final Log
  • コンストラクターのサマリー

    コンストラクター
    コンストラクター
    説明
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    protected void
    (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行後コールバック。また、場合によっては拡張先のカスタムサブクラスにも使用されます (必ずこの実装も呼び出すようにしてください)。
    void
    コンテナーがすべてのプロパティ値を適用した後に initialize() を呼び出します。
    protected void
    (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行前コールバック。また、場合によっては拡張先のカスタムサブクラスにも対応します (必ずこの実装も呼び出すようにしてください)。
    protected void
    ExecutorService.shutdownNow() から返された、実行を開始していない指定された残りのタスクをキャンセルします。
    void
    BeanFactory がエグゼキューターインスタンスを破棄するときに shutdown を呼び出します。
    int
    このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。
    void
    ExecutorService をセットアップします。
    protected abstract ExecutorServiceSE
    initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler)
    ターゲット ExecutorServiceSE インスタンスを作成します。
    protected void
    早期シャットダウンシグナル: さらなるタスクをトリガーせず、shutdown() メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。
    void
    基盤となる ExecutorService でシャットダウンを開始し、それ以降のタスクの送信を拒否します。
    boolean
    このエグゼキューターが一時停止していないか、シャットダウンしていないかどうかを確認します。
    void
    早期シャットダウンを開始するための ContextClosedEvent ハンドラー。
    void
    setAcceptTasksAfterContextClose(boolean acceptTasksAfterContextClose)
    アプリケーションコンテキストクローズフェーズが開始された後に、さらなるタスクを受け入れるかどうかを設定します。
    void
    このオブジェクトが実行される ApplicationContext を設定します。
    void
    setAwaitTerminationMillis(long awaitTerminationMillis)
    ミリ秒精度の setAwaitTerminationSeconds(int) のバリアント。
    void
    setAwaitTerminationSeconds(int awaitTerminationSeconds)
    コンテナーの残りの部分がシャットダウンし続ける前に、残りのタスクが実行を完了するのを待つために、このエグゼキュータがシャットダウン時にブロックする最大秒数を設定します。
    void
    この Bean を作成した Bean ファクトリで Bean の名前を設定します。
    void
    setPhase(int phase)
    このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。
    void
    ExecutorService に使用する RejectedExecutionHandler を設定します。
    void
    ExecutorService のスレッドプールに使用する ThreadFactory を設定します。
    void
    setThreadNamePrefix(StringSE threadNamePrefix)
    新しく作成されたスレッドの名前に使用するプレフィックスを指定します。
    void
    setVirtualThreads(boolean virtualThreads)
    プラットフォームスレッドの代わりに仮想スレッドを使用するかどうかを指定します。
    void
    setWaitForTasksToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown)
    実行中のタスクを中断せず、キュー内のすべてのタスクを実行せずに、シャットダウン時にスケジュールされたタスクが完了するまで待機するかどうかを設定します。
    void
    対応する構成設定に従って、基盤となる ExecutorService で完全なシャットダウンを実行します。
    void
    以前に一時停止されていた場合は、このエグゼキュータを再開します (それ以外の場合は何もしません)。
    void
    タスクの完了を待たずに、このエグゼキュータを一時停止します。
    void
    stop(RunnableSE callback)
    このエグゼキュータを一時停止し、現在実行中のタスクがすべて完了すると、指定されたコールバックをトリガーします。

    クラス org.springframework.scheduling.concurrent.CustomizableThreadFactory から継承されたメソッド

    newThread

    クラス java.lang.ObjectSE から継承されたメソッド

    clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE

    インターフェース org.springframework.context.ApplicationListener から継承されたメソッド

    supportsAsyncExecution

    インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド

    isAutoStartup
  • フィールドの詳細

  • コンストラクターの詳細

    • ExecutorConfigurationSupport

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

    • setVirtualThreads

      public void setVirtualThreads(boolean virtualThreads)
      プラットフォームスレッドの代わりに仮想スレッドを使用するかどうかを指定します。これはデフォルトではオフになっており、従来のプラットフォームスレッドプールが設定されます。

      仮想スレッドを使用して厳密に管理されたスレッドプールを設定するには、このフラグを Java 21 以上で true に設定します。SimpleAsyncTaskExecutor とは対照的に、これは実行スレッドの停止と再起動のための Spring のライフサイクル管理と統合されており、正常なシャットダウン処理のための早期停止シグナルも含まれています。

      これまたは setThreadFactory(java.util.concurrent.ThreadFactory) の両方ではなく、いずれかを指定します。

      導入:
      6.2
      関連事項:
    • setThreadFactory

      public void setThreadFactory(@Nullable ThreadFactorySE threadFactory)
      ExecutorService のスレッドプールに使用する ThreadFactory を設定します。デフォルトは、基礎となる ExecutorService のデフォルトのスレッドファクトリです。

      Jakarta EE または JSR-236 をサポートする他の管理環境では、JNDI に配置された ManagedThreadFactory を指定することを検討してください。デフォルトでは、"java:comp/DefaultManagedThreadFactory" にあります。検索に便利なように、XML の "jee:jndi-lookup" 名前空間要素またはプログラムによる JndiLocatorDelegate を使用します。または、マネージスレッドファクトリが見つからない場合は、Spring の DefaultManagedAwareThreadFactory をローカルスレッドにフォールバックすることを検討してください。

      関連事項:
    • setThreadNamePrefix

      public void setThreadNamePrefix(@Nullable StringSE threadNamePrefix)
      クラスからコピーされた説明: CustomizableThreadCreator
      新しく作成されたスレッドの名前に使用するプレフィックスを指定します。デフォルトは "SimpleAsyncTaskExecutor-" です。
      オーバーライド:
      クラス CustomizableThreadCreatorsetThreadNamePrefix 
    • setRejectedExecutionHandler

      public void setRejectedExecutionHandler(@Nullable RejectedExecutionHandlerSE rejectedExecutionHandler)
      ExecutorService で使用する RejectedExecutionHandler を設定します。デフォルトは、ExecutorService のデフォルトの中止ポリシーです。
      関連事項:
    • setAcceptTasksAfterContextClose

      public void setAcceptTasksAfterContextClose(boolean acceptTasksAfterContextClose)
      アプリケーションコンテキストクローズフェーズが開始された後に、さらなるタスクを受け入れるかどうかを設定します。

      6.1 のデフォルトは false で、エグゼキューターの早期ソフトシャットダウンをトリガーするため、それ以降のタスクの送信は拒否されます。これを true に切り替えて、シャットダウンフェーズが長くなる代わりに、他のコンポーネントが自身の停止および破棄コールバック中であってもタスクを送信できるようにします。この場合、エグゼキュータは調整されたライフサイクル停止フェーズを経ず、自身のシャットダウン時にタスクのみを停止します。

      acceptTasksAfterContextClose=true のような動作も、実質的にこのフラグの特定のバリアントである "waitForTasksToCompleteOnShutdown" から派生し、並行管理停止フェーズでの早期のソフトシャットダウンを、エグゼキュータの破棄ステップでのシリアルソフトシャットダウンに置き換え、"awaitTerminationSeconds" プロパティに従って個別に待機します。

      このフラグは、エグゼキューターが Spring アプリケーションコンテキストで実行されており、ContextClosedEvent を受信できる場合にのみ有効です。また、"strictEarlyShutdown" が指定されていない限り、ThreadPoolTaskExecutor はデフォルトで、調整されたライフサイクル停止と組み合わせて、コンテキストが閉じられた後のタスクを効果的に受け入れることに注意してください。

      導入:
      6.1
      関連事項:
    • setWaitForTasksToCompleteOnShutdown

      public void setWaitForTasksToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown)
      実行中のタスクを中断せず、キュー内のすべてのタスクを実行せずに、シャットダウン時にスケジュールされたタスクが完了するまで待機するかどうかを設定します。

      デフォルトは false で、最初に調整されたライフサイクル停止が行われ ("acceptTasksAfterContextClose" が設定されていない場合)、次に進行中のタスクを中断してキューをクリアすることで即時にシャットダウンします。シャットダウンフェーズを長くしてもタスクを完全に完了したい場合は、このフラグを true に切り替えます。この場合、エグゼキュータは調整されたライフサイクル停止フェーズを経ず、単に停止して、それ自体のシャットダウン時にタスクの完了を待つだけになります。

      進行中のタスクが完了するまで、Spring のコンテナーのシャットダウンは継続されることに注意してください。コンテナーの残りの部分がシャットダウンを続ける前に、このエグゼキュータがタスクの終了をブロックして待機するようにしたい場合 (たとえば、タスクに必要な他のリソースを維持するため)、このプロパティの代わりに、またはこのプロパティに加えて、"awaitTerminationSeconds" プロパティを設定します。

      関連事項:
    • setAwaitTerminationSeconds

      public void setAwaitTerminationSeconds(int awaitTerminationSeconds)
      コンテナーの残りの部分がシャットダウンし続ける前に、残りのタスクが実行を完了するのを待つために、このエグゼキュータがシャットダウン時にブロックする最大秒数を設定します。これは、残りのタスクがコンテナーによって管理されている他のリソースへのアクセスを必要とする可能性が高い場合に特に役立ちます。

      デフォルトでは、このエグゼキューターはタスクの終了をまったく待ちません。すぐにシャットダウンして、進行中のタスクを中断し、残りのタスクキューをクリアします。または、"waitForTasksToCompleteOnShutdown" フラグが true に設定されている場合、キュー内のすべての残りのタスクだけでなく、進行中のすべてのタスクを並行して完全に実行し続けます。コンテナーの残りの部分にシャットダウンします。

      いずれの場合でも、このプロパティを使用して終了待ち期間を指定すると、このエグゼキューターはタスクの終了を指定された時間(最大)待機します。経験則として、"waitForTasksToCompleteOnShutdown" を同時に true に設定する場合は、キュー内の残りのすべてのタスクが実行されるため、ここで大幅に高いタイムアウトを指定します。デフォルトのシャットダウン動作とは対照的に現在、スレッドの中断に反応しないタスクを実行しています。

      関連事項:
    • setAwaitTerminationMillis

      public void setAwaitTerminationMillis(long awaitTerminationMillis)
      ミリ秒精度の setAwaitTerminationSeconds(int) のバリアント。
      導入:
      5.2.4
      関連事項:
    • setPhase

      public void setPhase(int phase)
      このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。

      6.2 では、エグゼキュータ / スケジューラのデフォルトは DEFAULT_PHASE であり、他の SmartLifecycle 実装後に停止します。

      導入:
      6.1
      関連事項:
    • getPhase

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

      public void setBeanName(StringSE name)
      インターフェースからコピーされた説明: BeanNameAware
      この Bean を作成した Bean ファクトリで Bean の名前を設定します。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init メソッドなどの init コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanNameAwaresetBeanName 
      パラメーター:
      name - ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String) メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。
    • 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 オブジェクト
      関連事項:
    • afterPropertiesSet

      public void afterPropertiesSet()
      コンテナーがすべてのプロパティ値を適用した後に initialize() を呼び出します。
      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      関連事項:
    • initialize

      public void initialize()
      ExecutorService をセットアップします。
    • initializeExecutor

      protected abstract ExecutorServiceSE initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler)
      ターゲット ExecutorServiceSE インスタンスを作成します。afterPropertiesSet によって呼び出されます。
      パラメーター:
      threadFactory - 使用する ThreadFactory
      rejectedExecutionHandler - 使用する RejectedExecutionHandler
      戻り値:
      新しい ExecutorService インスタンス
      関連事項:
    • destroy

      public void destroy()
      BeanFactory がエグゼキューターインスタンスを破棄するときに shutdown を呼び出します。
      次で指定:
      インターフェース DisposableBeandestroy 
      関連事項:
    • initiateShutdown

      public void initiateShutdown()
      基盤となる ExecutorService でシャットダウンを開始し、それ以降のタスクの送信を拒否します。

      エグゼキュータはそれ以上のタスクを受け入れず、定期的なタスクのさらなるスケジュール設定を妨げ、既存のタスクをそのまま完了させます。このステップはノンブロッキングであり、後で完全な shutdown() 呼び出しを行う前に、早期シャットダウンシグナルとして適用できます。

      context close で早期シャットダウンシグナルが自動的に呼び出されます。特にコンテナーの外で、手動で呼び出すこともできます。

      導入:
      6.1
      関連事項:
    • shutdown

      public void shutdown()
      対応する構成設定に従って、基盤となる ExecutorService で完全なシャットダウンを実行します。

      このステップは、構成された終了期間中ブロックされる可能性があり、残りのタスクが完了するのを待ちます。早期シャットダウンシグナルでそれ以上のタスクを受け入れないようにするには、最初に initiateShutdown() を呼び出します。

      関連事項:
    • cancelRemainingTask

      protected void cancelRemainingTask(RunnableSE task)
      ExecutorService.shutdownNow() から返された、実行を開始していない指定された残りのタスクをキャンセルします。
      パラメーター:
      task - キャンセルするタスク (通常、RunnableFutureSE )
      導入:
      5.0.5
      関連事項:
    • start

      public void start()
      以前に一時停止されていた場合は、このエグゼキュータを再開します (それ以外の場合は何もしません)。
      次で指定:
      インターフェース Lifecyclestart 
      導入:
      6.1
      関連事項:
    • stop

      public void stop()
      タスクの完了を待たずに、このエグゼキュータを一時停止します。
      次で指定:
      インターフェース Lifecyclestop 
      導入:
      6.1
      関連事項:
    • stop

      public void stop(RunnableSE callback)
      このエグゼキュータを一時停止し、現在実行中のタスクがすべて完了すると、指定されたコールバックをトリガーします。
      次で指定:
      インターフェース SmartLifecyclestop 
      導入:
      6.1
      関連事項:
    • isRunning

      public boolean isRunning()
      このエグゼキューターが一時停止していないか、シャットダウンしていないかどうかを確認します。
      次で指定:
      インターフェース LifecycleisRunning 
      戻り値:
      コンポーネントが現在実行中かどうか
      導入:
      6.1
      関連事項:
    • beforeExecute

      protected void beforeExecute(ThreadSE thread, RunnableSE task)
      (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行前コールバック。また、場合によっては拡張先のカスタムサブクラスにも対応します (必ずこの実装も呼び出すようにしてください)。
      パラメーター:
      thread - タスクを実行するスレッド
      task - 実行されるタスク
      導入:
      6.1
      関連事項:
    • afterExecute

      protected void afterExecute(RunnableSE task, @Nullable ThrowableSE ex)
      (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行後コールバック。また、場合によっては拡張先のカスタムサブクラスにも使用されます (必ずこの実装も呼び出すようにしてください)。
      パラメーター:
      task - 実行されたタスク
      ex - 実行中にスローされた例外 (存在する場合)
      導入:
      6.1
      関連事項:
    • onApplicationEvent

      public void onApplicationEvent(ContextClosedEvent event)
      早期シャットダウンを開始するための ContextClosedEvent ハンドラー。
      次で指定:
      インターフェース ApplicationListener<ContextClosedEvent>onApplicationEvent 
      パラメーター:
      event - 応答するイベント
      導入:
      6.1
      関連事項:
    • initiateEarlyShutdown

      protected void initiateEarlyShutdown()
      早期シャットダウンシグナル: さらなるタスクをトリガーせず、shutdown() メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。これは coordinated lifecycle stop phase と併用します。

      遅延シャットダウンの兆候が決定されていない場合、つまり "acceptTasksAfterContextClose および "waitForTasksToCompleteOnShutdown" フラグが設定されていない場合、onApplicationEvent(ContextClosedEvent) から呼び出されます。

      デフォルトの実装は initiateShutdown() を呼び出します。

      導入:
      6.1.4
      関連事項: