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