public class ScheduledExecutorFactoryBean extends ExecutorConfigurationSupport implements FactoryBean<java.util.concurrent.ScheduledExecutorService>
ScheduledExecutorService
(デフォルトでは ScheduledThreadPoolExecutor
)をセットアップし、Bean 参照用に公開する FactoryBean
。ScheduledExecutorTasks
の登録を可能にし、初期化時に ScheduledExecutorService
を自動的に開始し、コンテキストの破棄時にキャンセルします。起動時にタスクの静的登録のみを必要とするシナリオでは、アプリケーションコードで ScheduledExecutorService
インスタンス自体にアクセスする必要はまったくありません。ScheduledExecutorFactoryBean
は、ライフサイクルの統合に使用されます。
別の方法として、コンストラクターインジェクションを使用して ScheduledThreadPoolExecutor
インスタンスを直接セットアップするか、Executors
クラスを指すファクトリメソッド定義を使用できます。 これは特に、構成クラスの一般的な @Bean
メソッドに強く推奨されます。この FactoryBean
バリアントは、ScheduledExecutorService
ではなく FactoryBean
型を返すように強制します。
ScheduledExecutorService
は、実行ごとに新しいジョブをインスタンス化する Quartz とは対照的に、繰り返し実行間で共有される Runnable
インスタンスを使用することに注意してください。
警告 : ネイティブ ScheduledExecutorService
を介して送信された Runnables
は、例外をスローすると、実行スケジュールから削除されます。このような例外の後も実行を継続する場合は、この FactoryBean の "continueScheduledExecutionAfterException"
プロパティを "true" に切り替えます。
setPoolSize(int)
, setRemoveOnCancelPolicy(boolean)
, ExecutorConfigurationSupport.setThreadFactory(java.util.concurrent.ThreadFactory)
, ScheduledExecutorTask
, ScheduledExecutorService
, ScheduledThreadPoolExecutor
, 連載形式 logger
コンストラクターと説明 |
---|
ScheduledExecutorFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
protected java.util.concurrent.ScheduledExecutorService | createExecutor(int poolSize, java.util.concurrent.ThreadFactory threadFactory, java.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler) 新しい ScheduledExecutorService インスタンスを作成します。 |
java.util.concurrent.ScheduledExecutorService | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
java.lang.Class<? extends java.util.concurrent.ScheduledExecutorService> | getObjectType() この FactoryBean が作成するオブジェクトの型を返します。事前にわからない場合は null を返します。 |
protected java.lang.Runnable | getRunnableToSchedule(ScheduledExecutorTask task) 特定のタスクをスケジュールする実際の Runnable を決定します。 |
protected java.util.concurrent.ExecutorService | initializeExecutor(java.util.concurrent.ThreadFactory threadFactory, java.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler) ターゲット ExecutorService インスタンスを作成します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
protected void | registerTasks(ScheduledExecutorTask[] tasks, java.util.concurrent.ScheduledExecutorService executor) 指定された ScheduledExecutorService に指定された ScheduledExecutorTasks を登録します。 |
void | setContinueScheduledExecutionAfterException(boolean continueScheduledExecutionAfterException) 例外をスローした後、スケジュールされたタスクの実行を継続するかどうかを指定します。 |
void | setExposeUnconfigurableExecutor(boolean exposeUnconfigurableExecutor) この FactoryBean が、作成されたエグゼキューターの構成不可能なデコレーターを公開するかどうかを指定します。 |
void | setPoolSize(int poolSize) ScheduledExecutorService のプールサイズを設定します。 |
void | setRemoveOnCancelPolicy(boolean removeOnCancelPolicy) ScheduledThreadPoolExecutor でキャンセル時削除モードを設定します。 |
void | setScheduledExecutorTasks(ScheduledExecutorTask... scheduledExecutorTasks) ScheduledExecutorTask オブジェクトのリストを、この FactoryBean が作成する ScheduledExecutorService に登録します。 |
afterPropertiesSet, cancelRemainingTask, destroy, initialize, setAwaitTerminationSeconds, setBeanName, setRejectedExecutionHandler, setThreadFactory, setThreadNamePrefix, setWaitForTasksToCompleteOnShutdown, shutdown
newThread
createThread, getDefaultThreadNamePrefix, getThreadGroup, getThreadNamePrefix, getThreadPriority, isDaemon, nextThreadName, setDaemon, setThreadGroup, setThreadGroupName, setThreadPriority
public void setPoolSize(int poolSize)
public void setScheduledExecutorTasks(ScheduledExecutorTask... scheduledExecutorTasks)
ScheduledExecutorService.schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit)
、ScheduledExecutorService.scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit)
、ScheduledExecutorService.scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit)
public void setRemoveOnCancelPolicy(boolean removeOnCancelPolicy)
ScheduledThreadPoolExecutor
でキャンセル時削除モードを設定します。 デフォルトは false
です。true
に設定されている場合、ターゲットエグゼキューターはキャンセル時に削除モードに切り替えられます(可能な場合は、ソフトフォールバックが使用されます)。
public void setContinueScheduledExecutionAfterException(boolean continueScheduledExecutionAfterException)
デフォルトは "false" で、ScheduledExecutorService
のネイティブの動作と一致します。各タスクの例外のない実行のためにこのフラグを "true" に切り替え、実行が成功した場合のようにスケジュールされた実行を継続します。
ScheduledExecutorService.scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit)
public void setExposeUnconfigurableExecutor(boolean exposeUnconfigurableExecutor)
デフォルトは "false" で、生のエグゼキューターを Bean 参照として公開します。このフラグを "true" に切り替えて、クライアントがエグゼキューターの構成を変更できないようにします。
Executors.unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService)
protected java.util.concurrent.ExecutorService initializeExecutor(java.util.concurrent.ThreadFactory threadFactory, java.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler)
ExecutorConfigurationSupport
ExecutorService
インスタンスを作成します。afterPropertiesSet
によって呼び出されます。ExecutorConfigurationSupport
の initializeExecutor
threadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandlerExecutorConfigurationSupport.afterPropertiesSet()
protected java.util.concurrent.ScheduledExecutorService createExecutor(int poolSize, java.util.concurrent.ThreadFactory threadFactory, java.util.concurrent.RejectedExecutionHandler rejectedExecutionHandler)
ScheduledExecutorService
インスタンスを作成します。 デフォルトの実装は ScheduledThreadPoolExecutor
を作成します。カスタム ScheduledExecutorService
インスタンスを提供するためにサブクラスでオーバーライドできます。
poolSize
- 指定されたプールサイズ threadFactory
- 使用する ThreadFactoryrejectedExecutionHandler
- 使用する RejectedExecutionHandlerExecutorConfigurationSupport.afterPropertiesSet()
, ScheduledThreadPoolExecutor
protected void registerTasks(ScheduledExecutorTask[] tasks, java.util.concurrent.ScheduledExecutorService executor)
ScheduledExecutorService
に指定された ScheduledExecutorTasks
を登録します。tasks
- 指定された ScheduledExecutorTasks (空になることはありません)executor
- タスクを登録する ScheduledExecutorServiceprotected java.lang.Runnable getRunnableToSchedule(ScheduledExecutorTask task)
例外をキャッチしてログに記録する DelegatingErrorHandlingRunnable
でタスクの Runnable をラップします。必要に応じて、"continueScheduledExecutionAfterException"
フラグに従って例外を抑制します。
task
- スケジュールする ScheduledExecutorTask@Nullable public java.util.concurrent.ScheduledExecutorService getObject()
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<java.util.concurrent.ScheduledExecutorService>
の getObject
null
にすることができます)FactoryBeanNotInitializedException
public java.lang.Class<? extends java.util.concurrent.ScheduledExecutorService> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<java.util.concurrent.ScheduledExecutorService>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? 注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject()
から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true
を返さないでください。
FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。
注意 : false
を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean
インターフェースの実装は、SmartFactoryBean.isPrototype()
メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean
実装は、isSingleton()
実装が false
を返す場合、常に独立したインスタンスを返すと単純に想定されます。
FactoryBean
は通常シングルトンインスタンスを管理するため、デフォルトの実装では true
が返されます。
FactoryBean<java.util.concurrent.ScheduledExecutorService>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()