クラス ExecutorConfigurationSupport
- 実装されたすべてのインターフェース:
SerializableSE
、ThreadFactorySE
、EventListenerSE
、Aware
、BeanNameAware
、DisposableBean
、InitializingBean
、ApplicationContextAware
、ApplicationListener<ContextClosedEvent>
、Lifecycle
、Phased
、SmartLifecycle
- 既知の直属サブクラス
ScheduledExecutorFactoryBean
、ThreadPoolExecutorFactoryBean
、ThreadPoolTaskExecutor
、ThreadPoolTaskScheduler
ExecutorService
SE(通常は ThreadPoolExecutor
SE または ScheduledThreadPoolExecutor
SE)をセットアップするための基本クラス。CustomizableThreadCreator
からスレッドのカスタマイズオプション (名前、優先順位など) を継承して、共通の構成設定と共通のライフサイクル処理を定義します。
- 導入:
- 3.0
- 作成者:
- Juergen Hoeller
- 関連事項:
フィールドサマリー
修飾子と型フィールド説明static final int
実行者SmartLifecycle
のデフォルトフェーズ:Integer.MAX_VALUE / 2
.protected final Log
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明protected void
afterExecute
(RunnableSE task, ThrowableSE ex) (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行後コールバック。また、場合によっては拡張先のカスタムサブクラスにも使用されます (必ずこの実装も呼び出すようにしてください)。void
コンテナーがすべてのプロパティ値を適用した後にinitialize()
を呼び出します。protected void
beforeExecute
(ThreadSE thread, RunnableSE task) (開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行前コールバック。また、場合によっては拡張先のカスタムサブクラスにも対応します (必ずこの実装も呼び出すようにしてください)。protected void
ExecutorService.shutdownNow()
から返された、実行を開始していない指定された残りのタスクをキャンセルします。void
destroy()
BeanFactory がエグゼキューターインスタンスを破棄するときにshutdown
を呼び出します。int
getPhase()
このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。void
ExecutorService をセットアップします。protected abstract ExecutorServiceSE
initializeExecutor
(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ターゲットExecutorService
SE インスタンスを作成します。protected void
早期シャットダウンシグナル: さらなるタスクをトリガーせず、shutdown()
メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。void
基盤となる ExecutorService でシャットダウンを開始し、それ以降のタスクの送信を拒否します。boolean
このエグゼキューターが一時停止していないか、シャットダウンしていないかどうかを確認します。void
早期シャットダウンを開始するためのContextClosedEvent
ハンドラー。void
setAcceptTasksAfterContextClose
(boolean acceptTasksAfterContextClose) アプリケーションコンテキストクローズフェーズが開始された後に、さらなるタスクを受け入れるかどうかを設定します。void
setApplicationContext
(ApplicationContext applicationContext) このオブジェクトが実行される ApplicationContext を設定します。void
setAwaitTerminationMillis
(long awaitTerminationMillis) ミリ秒精度のsetAwaitTerminationSeconds(int)
のバリアント。void
setAwaitTerminationSeconds
(int awaitTerminationSeconds) コンテナーの残りの部分がシャットダウンし続ける前に、残りのタスクが実行を完了するのを待つために、このエグゼキュータがシャットダウン時にブロックする最大秒数を設定します。void
setBeanName
(StringSE name) この Bean を作成した Bean ファクトリで Bean の名前を設定します。void
setPhase
(int phase) このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを指定します。void
setRejectedExecutionHandler
(RejectedExecutionHandlerSE rejectedExecutionHandler) ExecutorService に使用する RejectedExecutionHandler を設定します。void
setThreadFactory
(ThreadFactorySE threadFactory) ExecutorService のスレッドプールに使用する ThreadFactory を設定します。void
setThreadNamePrefix
(StringSE threadNamePrefix) 新しく作成されたスレッドの名前に使用するプレフィックスを指定します。void
setVirtualThreads
(boolean virtualThreads) プラットフォームスレッドの代わりに仮想スレッドを使用するかどうかを指定します。void
setWaitForTasksToCompleteOnShutdown
(boolean waitForJobsToCompleteOnShutdown) 実行中のタスクを中断せず、キュー内のすべてのタスクを実行せずに、シャットダウン時にスケジュールされたタスクが完了するまで待機するかどうかを設定します。void
shutdown()
対応する構成設定に従って、基盤となる ExecutorService で完全なシャットダウンを実行します。void
start()
以前に一時停止されていた場合は、このエグゼキュータを再開します (それ以外の場合は何もしません)。void
stop()
タスクの完了を待たずに、このエグゼキュータを一時停止します。void
stop
(RunnableSE callback) このエグゼキュータを一時停止し、現在実行中のタスクがすべて完了すると、指定されたコールバックをトリガーします。クラス org.springframework.scheduling.concurrent.CustomizableThreadFactory から継承されたメソッド
newThread
クラス org.springframework.util.CustomizableThreadCreator から継承されたメソッド
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadPriority
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.context.ApplicationListener から継承されたメソッド
supportsAsyncExecution
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
isAutoStartup
フィールドの詳細
DEFAULT_PHASE
public static final int DEFAULT_PHASE実行者SmartLifecycle
のデフォルトフェーズ:Integer.MAX_VALUE / 2
.これは、他の
SmartLifecycle
実装に関連付けられたデフォルトフェーズInteger.MAX_VALUE
とは異なり、通常は自動で開始されるエグゼキュータ / スケジューラ Bean を初期の起動フェーズとその後のシャットダウンフェーズに配置しながら、共通フェーズ 0 を持つ通常のLifecycle
コンポーネント用の余地を残します。logger
コンストラクターの詳細
ExecutorConfigurationSupport
public ExecutorConfigurationSupport()
メソッドの詳細
setVirtualThreads
public void setVirtualThreads(boolean virtualThreads) プラットフォームスレッドの代わりに仮想スレッドを使用するかどうかを指定します。これはデフォルトではオフになっており、従来のプラットフォームスレッドプールが設定されます。仮想スレッドを使用して厳密に管理されたスレッドプールを設定するには、このフラグを Java 21 以上で
true
に設定します。SimpleAsyncTaskExecutor
とは対照的に、これは実行スレッドの停止と再起動のための Spring のライフサイクル管理と統合されており、正常なシャットダウン処理のための早期停止シグナルも含まれています。これまたは
setThreadFactory(java.util.concurrent.ThreadFactory)
の両方ではなく、いずれかを指定します。setThreadFactory
ExecutorService のスレッドプールに使用する ThreadFactory を設定します。デフォルトは、基礎となる ExecutorService のデフォルトのスレッドファクトリです。Jakarta EE または JSR-236 をサポートする他の管理環境では、JNDI に配置された ManagedThreadFactory を指定することを検討してください。デフォルトでは、"java:comp/DefaultManagedThreadFactory" にあります。検索に便利なように、XML の "jee:jndi-lookup" 名前空間要素またはプログラムによる
JndiLocatorDelegate
を使用します。または、マネージスレッドファクトリが見つからない場合は、Spring のDefaultManagedAwareThreadFactory
をローカルスレッドにフォールバックすることを検討してください。setThreadNamePrefix
クラスからコピーされた説明:CustomizableThreadCreator
新しく作成されたスレッドの名前に使用するプレフィックスを指定します。デフォルトは "SimpleAsyncTaskExecutor-" です。- オーバーライド:
- クラス
CustomizableThreadCreator
のsetThreadNamePrefix
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
はデフォルトで、調整されたライフサイクル停止と組み合わせて、コンテキストが閉じられた後のタスクを効果的に受け入れることに注意してください。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()このエグゼキュータを一時停止および再開するためのライフサイクルフェーズを返します。- 次で指定:
- インターフェース
Phased
のgetPhase
- 次で指定:
- インターフェース
SmartLifecycle
のgetPhase
- 導入:
- 6.1
- 関連事項:
setBeanName
インターフェースからコピーされた説明:BeanNameAware
この Bean を作成した Bean ファクトリで Bean の名前を設定します。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanNameAware
のsetBeanName
- パラメーター:
name
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。
setApplicationContext
インターフェースからコピーされた説明:ApplicationContextAware
このオブジェクトが実行される ApplicationContext を設定します。通常、この呼び出しはオブジェクトの初期化に使用されます。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
、ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
およびMessageSourceAware
の後に呼び出されます(該当する場合)。- 次で指定:
- インターフェース
ApplicationContextAware
のsetApplicationContext
- パラメーター:
applicationContext
- このオブジェクトによって使用される ApplicationContext オブジェクト- 関連事項:
afterPropertiesSet
public void afterPropertiesSet()コンテナーがすべてのプロパティ値を適用した後にinitialize()
を呼び出します。- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
- 関連事項:
initialize
public void initialize()ExecutorService をセットアップします。initializeExecutor
protected abstract ExecutorServiceSE initializeExecutor(ThreadFactorySE threadFactory, RejectedExecutionHandlerSE rejectedExecutionHandler) ターゲットExecutorService
SE インスタンスを作成します。afterPropertiesSet
によって呼び出されます。- パラメーター:
threadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandler- 戻り値:
- 新しい ExecutorService インスタンス
- 関連事項:
destroy
public void destroy()BeanFactory がエグゼキューターインスタンスを破棄するときにshutdown
を呼び出します。- 次で指定:
- インターフェース
DisposableBean
のdestroy
- 関連事項:
initiateShutdown
public void initiateShutdown()基盤となる ExecutorService でシャットダウンを開始し、それ以降のタスクの送信を拒否します。エグゼキュータはそれ以上のタスクを受け入れず、定期的なタスクのさらなるスケジュール設定を妨げ、既存のタスクをそのまま完了させます。このステップはノンブロッキングであり、後で完全な
shutdown()
呼び出しを行う前に、早期シャットダウンシグナルとして適用できます。context close
で早期シャットダウンシグナルが自動的に呼び出されます。特にコンテナーの外で、手動で呼び出すこともできます。- 導入:
- 6.1
- 関連事項:
shutdown
public void shutdown()対応する構成設定に従って、基盤となる ExecutorService で完全なシャットダウンを実行します。このステップは、構成された終了期間中ブロックされる可能性があり、残りのタスクが完了するのを待ちます。早期シャットダウンシグナルでそれ以上のタスクを受け入れないようにするには、最初に
initiateShutdown()
を呼び出します。cancelRemainingTask
ExecutorService.shutdownNow()
から返された、実行を開始していない指定された残りのタスクをキャンセルします。- パラメーター:
task
- キャンセルするタスク (通常、RunnableFuture
SE )- 導入:
- 5.0.5
- 関連事項:
start
public void start()以前に一時停止されていた場合は、このエグゼキュータを再開します (それ以外の場合は何もしません)。stop
public void stop()タスクの完了を待たずに、このエグゼキュータを一時停止します。stop
このエグゼキュータを一時停止し、現在実行中のタスクがすべて完了すると、指定されたコールバックをトリガーします。- 次で指定:
- インターフェース
SmartLifecycle
のstop
- 導入:
- 6.1
- 関連事項:
isRunning
public boolean isRunning()このエグゼキューターが一時停止していないか、シャットダウンしていないかどうかを確認します。beforeExecute
(開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行前コールバック。また、場合によっては拡張先のカスタムサブクラスにも対応します (必ずこの実装も呼び出すようにしてください)。- パラメーター:
thread
- タスクを実行するスレッドtask
- 実行されるタスク- 導入:
- 6.1
- 関連事項:
afterExecute
(開始 / 停止処理のため) 委譲先のフレームワークサブクラスの実行後コールバック。また、場合によっては拡張先のカスタムサブクラスにも使用されます (必ずこの実装も呼び出すようにしてください)。- パラメーター:
task
- 実行されたタスクex
- 実行中にスローされた例外 (存在する場合)- 導入:
- 6.1
- 関連事項:
onApplicationEvent
早期シャットダウンを開始するためのContextClosedEvent
ハンドラー。- 次で指定:
- インターフェース
ApplicationListener<ContextClosedEvent>
のonApplicationEvent
- パラメーター:
event
- 応答するイベント- 導入:
- 6.1
- 関連事項:
initiateEarlyShutdown
protected void initiateEarlyShutdown()早期シャットダウンシグナル: さらなるタスクをトリガーせず、shutdown()
メソッドの実際の破棄ステップに入る前に既存のタスクを完了させます。これはcoordinated lifecycle stop phase
と併用します。遅延シャットダウンの兆候が決定されていない場合、つまり
"acceptTasksAfterContextClose
および"waitForTasksToCompleteOnShutdown"
フラグが設定されていない場合、onApplicationEvent(ContextClosedEvent)
から呼び出されます。デフォルトの実装は
initiateShutdown()
を呼び出します。- 導入:
- 6.1.4
- 関連事項: