クラス SchedulerFactoryBean

java.lang.ObjectSE
org.springframework.scheduling.quartz.SchedulerAccessor
org.springframework.scheduling.quartz.SchedulerFactoryBean
実装されたすべてのインターフェース:
AwareBeanNameAwareDisposableBeanFactoryBean<Scheduler>InitializingBeanApplicationContextAwareLifecyclePhasedResourceLoaderAwareSmartLifecycle

Quartz Scheduler を作成および構成し、そのライフサイクルを Spring アプリケーションコンテキストの一部として管理し、依存性注入のための Bean 参照としてスケジューラを公開する FactoryBean

JobDetails、カレンダー、トリガーの登録を可能にし、初期化時にスケジューラーを自動的に開始し、破棄時にスケジューラーをシャットダウンします。起動時にジョブの静的登録のみが必要なシナリオでは、アプリケーションコードでスケジューラインスタンス自体にアクセスする必要はありません。

実行時にジョブを動的に登録するには、この SchedulerFactoryBean への Bean 参照を使用して、Quartz スケジューラ(org.quartz.Scheduler)に直接アクセスします。これにより、新しいジョブとトリガーを作成したり、スケジューラ全体を制御および監視したりできます。

繰り返し実行間で共有される TimerTask インスタンスを使用するタイマーとは対照的に、Quartz は実行ごとに新しいジョブをインスタンス化することに注意してください。JobDetail 記述子のみが共有されます。

永続的なジョブを使用する場合は、Spring で管理された(またはプレーンな JTA)トランザクション内でスケジューラのすべての操作を実行することを強くお勧めします。そうでなければ、データベースのロックは適切に機能せず、壊れる可能性さえあります。(詳細については、setDataSource javadoc を参照してください。)

トランザクション実行を実現するための推奨される方法は、ビジネスファサードレベルで宣言型トランザクションの境界を定めることです。これは、これらのスコープ内で実行されるスケジューラー操作に自動的に適用されます。または、スケジューラ自体にトランザクションアドバイスを追加することもできます。

Spring 4.1 の時点で、Quartz 2.1.4 以降と互換性があります。

導入:
18.02.2004
作成者:
Juergen Hoeller
関連事項:
  • フィールドの詳細

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

    • SchedulerFactoryBean

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

    • getConfigTimeResourceLoader

      @Nullable public static ResourceLoader getConfigTimeResourceLoader()
      ResourceLoaderClassLoadHelper で使用される、現在構成されている Quartz スケジューラの ResourceLoader を返します。

      このインスタンスは、対応するスケジューラの初期化の前に設定され、直後にリセットされます。構成時にのみ使用できます。

      関連事項:
    • getConfigTimeTaskExecutor

      @Nullable public static ExecutorSE getConfigTimeTaskExecutor()
      LocalTaskExecutorThreadPool で使用される、現在構成されている Quartz スケジューラの ExecutorSE を返します。

      このインスタンスは、対応するスケジューラの初期化の前に設定され、直後にリセットされます。構成時にのみ使用できます。

      導入:
      2.0
      関連事項:
    • getConfigTimeDataSource

      @Nullable public static DataSourceSE getConfigTimeDataSource()
      LocalDataSourceJobStore で使用される、現在構成されている Quartz スケジューラの DataSourceSE を返します。

      このインスタンスは、対応するスケジューラの初期化の前に設定され、直後にリセットされます。構成時にのみ使用できます。

      導入:
      1.1
      関連事項:
    • getConfigTimeNonTransactionalDataSource

      @Nullable public static DataSourceSE getConfigTimeNonTransactionalDataSource()
      LocalDataSourceJobStore で使用される、現在構成されている Quartz スケジューラの非トランザクション DataSourceSE を返します。

      このインスタンスは、対応するスケジューラの初期化の前に設定され、直後にリセットされます。構成時にのみ使用できます。

      導入:
      1.1
      関連事項:
    • setSchedulerFactory

      public void setSchedulerFactory(SchedulerFactory schedulerFactory)
      使用する外部 Quartz SchedulerFactory インスタンスを設定します。

      デフォルトは内部 StdSchedulerFactory インスタンスです。このメソッドが呼び出されると、setSchedulerFactoryClass(java.lang.Class<? extends org.quartz.SchedulerFactory>) によって指定されたクラス、および setConfigLocation(org.springframework.core.io.Resource)setQuartzProperties(java.util.Properties)setTaskExecutor(java.util.concurrent.Executor) または setDataSource(javax.sql.DataSource) によって指定された設定がオーバーライドされます。

      注意 : 外部で提供される SchedulerFactory インスタンスでは、setConfigLocation(org.springframework.core.io.Resource)setQuartzProperties(java.util.Properties) などのローカル設定は、ここで SchedulerFactoryBean で無視され、外部 SchedulerFactory インスタンスが独自に初期化されることが期待されます。

      導入:
      4.3.15
      関連事項:
    • setSchedulerFactoryClass

      public void setSchedulerFactoryClass(ClassSE<? extends SchedulerFactory> schedulerFactoryClass)
      使用する Quartz SchedulerFactory 実装を設定します。

      デフォルトは StdSchedulerFactory クラスで、quartz.jar から標準の quartz.properties を読み取ります。カスタム Quartz プロパティを適用するには、このローカル SchedulerFactoryBean インスタンスで "configLocation""quartzProperties" などを指定します。

      関連事項:
    • setSchedulerName

      public void setSchedulerName(StringSE schedulerName)
      org.quartz.scheduler.instanceName プロパティの代わりに、SchedulerFactory を介して作成するスケジューラーの名前を設定します。

      指定しない場合、名前は Quartz プロパティ(org.quartz.scheduler.instanceName)または宣言された SchedulerFactoryBean Bean 名からフォールバックとして取得されます。

      関連事項:
    • setConfigLocation

      public void setConfigLocation(Resource configLocation)
      Quartz プロパティ構成ファイルの場所を、たとえばクラスパスリソース "classpath:quartz.properties" として設定します。

      メモ: 必要なすべてのプロパティがこの Bean を介してローカルで指定されている場合、または Quartz のデフォルト構成に依存している場合は省略できます。

      関連事項:
    • setQuartzProperties

      public void setQuartzProperties(PropertiesSE quartzProperties)
      "org.quartz.threadPool.class" などの Quartz プロパティを設定します。

      Quartz プロパティ構成ファイルの値をオーバーライドするため、またはローカルで必要なすべてのプロパティを指定するために使用できます。

      関連事項:
    • setTaskExecutor

      public void setTaskExecutor(ExecutorSE taskExecutor)
      Spring 管理の ExecutorSE を Quartz バックエンドとして使用するように設定します。Quartz SPI を介してスレッドプールとして公開されます。

      ローカルの JDK ThreadPoolExecutor または CommonJ WorkManager を Quartz バックエンドとして割り当て、Quartz の手動スレッド作成を回避するために使用できます。

      デフォルトでは、Quartz SimpleThreadPool が使用され、対応する Quartz プロパティを通じて構成されます。

      導入:
      2.0
      関連事項:
    • setDataSource

      public void setDataSource(DataSourceSE dataSource)
      スケジューラが使用するデフォルトの DataSourceSE を設定します。

      メモ: これが設定されている場合、意味のない二重構成を回避するために、Quartz 設定でジョブストア "dataSource" を定義しないでください。また、"org.quartz.jobStore.class" プロパティはまったく定義しないでください。(Spring の LocalDataSourceJobStore を明示的に定義することもできますが、このメソッドを使用する場合はこれがデフォルトです。)

      Quartz の Spring 固有のサブクラスの JobStoreCMT が使用されます。Spring で管理された(またはプレーンな JTA)トランザクション内でスケジューラのすべての操作を実行することを強くお勧めします。そうでなければ、データベースのロックは正しく機能せず、壊れる可能性さえあります(たとえば、トランザクションなしで Oracle のロックを取得しようとした場合)。

      トランザクションと非トランザクションの両方の DataSource アクセスをサポートします。非 XA DataSource およびローカル Spring トランザクションでは、DataSource 引数は 1 つで十分です。XA DataSource およびグローバル JTA トランザクションの場合、SchedulerFactoryBean の "nonTransactionalDataSource" プロパティを設定して、グローバルトランザクションに参加しない非 XA DataSource を渡す必要があります。

      導入:
      1.1
      関連事項:
    • setNonTransactionalDataSource

      public void setNonTransactionalDataSource(DataSourceSE nonTransactionalDataSource)
      非トランザクションアクセスに使用する DataSourceSE を設定します

      これは、デフォルトの DataSource が常にトランザクションに参加する XA DataSource である場合にのみ必要です。そのようなシナリオでは、その DataSource の非 XA バージョンを "nonTransactionalDataSource" として指定する必要があります。

      これは、ローカル DataSource インスタンスおよび Spring トランザクションには関係ありません。そこでは、単一のデフォルト DataSource を "dataSource" として指定するだけで十分です。

      導入:
      1.1
      関連事項:
    • setSchedulerContextAsMap

      public void setSchedulerContextAsMap(MapSE<StringSE,?> schedulerContextAsMap)
      指定されたマップを介してスケジューラコンテキストにオブジェクトを登録します。これらのオブジェクトは、このスケジューラで実行されるすべてのジョブで使用できます。

      メモ: JobDetail がデータベースに保持される永続的なジョブを使用する場合は、Spring 管理の Bean または ApplicationContext 参照を JobDataMap ではなく SchedulerContext に配置しないでください。

      パラメーター:
      schedulerContextAsMap - String キーと任意のオブジェクトを値として持つ Map (たとえば、Spring に管理された Bean)
      関連事項:
    • setApplicationContextSchedulerContextKey

      public void setApplicationContextSchedulerContextKey(StringSE applicationContextSchedulerContextKey)
      SchedulerContext で公開する ApplicationContext 参照のキーを設定します(例: "applicationContext" )。デフォルトはなしです。Spring ApplicationContext で実行する場合にのみ適用されます。

      メモ: JobDetail がデータベースに保持される永続ジョブを使用する場合は、ApplicationContext 参照を JobDataMap ではなく SchedulerContext に配置してください。

      QuartzJobBean の場合、参照は Bean プロパティとしてジョブインスタンスに適用されます。"applicationContext" 属性は、そのシナリオの "setApplicationContext" メソッドに対応します。

      Quartz 自体がジョブのライフサイクルを担当するため、ApplicationContextAware のような BeanFactory コールバックインターフェースは Quartz ジョブインスタンスに自動的に適用されないことに注意してください。

      関連事項:
    • setJobFactory

      public void setJobFactory(JobFactory jobFactory)
      このスケジューラに使用する Quartz JobFactory を設定します。

      デフォルトは Spring の AdaptableJobFactory で、RunnableSE オブジェクトと標準の Quartz Job インスタンスをサポートします。このデフォルトはローカルスケジューラにのみ適用され、RemoteScheduler には適用されないことに注意してください(カスタム JobFactory の設定は Quartz ではサポートされていません)。

      ここで Spring の SpringBeanJobFactory のインスタンスを指定して(通常は内部 Bean 定義として)、指定したジョブデータマップとスケジューラコンテキストからジョブの Bean プロパティを自動的に設定します。

      導入:
      2.0
      関連事項:
    • setAutoStartup

      public void setAutoStartup(boolean autoStartup)
      初期化後にスケジューラーを自動的に開始するかどうかを設定します。

      デフォルトは "true" です。手動で起動できるようにするには、これを "false" に設定します。

    • isAutoStartup

      public boolean isAutoStartup()
      このスケジューラーが自動起動用に構成されているかどうかを返します。"true" の場合、スケジューラーは、コンテキストがリフレッシュされた後、および開始遅延(ある場合)の後に開始されます。
      次で指定:
      インターフェース SmartLifecycleisAutoStartup 
      関連事項:
    • setPhase

      public void setPhase(int phase)
      このスケジューラーを開始および停止するフェーズを指定します。起動順序は最低から最高に進み、シャットダウン順序はその逆です。デフォルトでは、この値は Integer.MAX_VALUE です。つまり、このスケジューラーはできるだけ遅く開始し、できるだけ早く停止します。
      導入:
      3.0
    • getPhase

      public int getPhase()
      このスケジューラーが開始および停止されるフェーズを返します。
      次で指定:
      インターフェース PhasedgetPhase 
      次で指定:
      インターフェース SmartLifecyclegetPhase 
      関連事項:
    • setStartupDelay

      public void setStartupDelay(int startupDelay)
      初期化後、スケジューラーを非同期で開始する前に待機する秒数を設定します。デフォルトは 0 です。これは、この Bean の初期化時に即時同期起動を意味します。

      これを 10 または 20 秒に設定することは、アプリケーション全体が起動する前にジョブを実行する必要がない場合に意味があります。

    • setExposeSchedulerInRepository

      public void setExposeSchedulerInRepository(boolean exposeSchedulerInRepository)
      Quartz SchedulerRepository で Spring 管理の Scheduler インスタンスを公開するかどうかを設定します。Spring が管理するスケジューラは通常、Spring コンテキスト内でのアクセスのみを目的としているため、デフォルトは "false" です。

      スケジューラをグローバルに公開するには、このフラグを "true" に切り替えます。この動作に依存する既存の Spring アプリケーションがない限り、これはお勧めしません。このようなグローバルな露出は、以前の Spring バージョンでは偶発的なデフォルトであったことに注意してください。これは Spring 2.5.6 で修正されています。

    • setWaitForJobsToCompleteOnShutdown

      public void setWaitForJobsToCompleteOnShutdown(boolean waitForJobsToCompleteOnShutdown)
      シャットダウン時に実行中のジョブが完了するのを待つかどうかを設定します。

      デフォルトは "false" です。シャットダウンフェーズが長くなる代わりにジョブを完全に完了したい場合は、これを "true" に切り替えます。

      関連事項:
    • 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() throws ExceptionSE
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      例外:
      ExceptionSE - 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
    • createScheduler

      protected Scheduler createScheduler(SchedulerFactory schedulerFactory, @Nullable StringSE schedulerName) throws SchedulerException
      指定されたファクトリとスケジューラー名のスケジューラーインスタンスを作成します。afterPropertiesSet() によって呼び出されます。

      デフォルトの実装では、SchedulerFactory の getScheduler メソッドを呼び出します。カスタムスケジューラを作成するためにオーバーライドできます。

      パラメーター:
      schedulerFactory - スケジューラを作成するファクトリ
      schedulerName - 作成するスケジューラの名前
      戻り値:
      スケジューラインスタンス
      例外:
      SchedulerException - Quartz メソッドによってスローされた場合
      関連事項:
    • startScheduler

      protected void startScheduler(Scheduler scheduler, int startupDelay) throws SchedulerException
      "startupDelay" 設定を考慮して、Quartz スケジューラを起動します。
      パラメーター:
      scheduler - 開始するスケジューラ
      startupDelay - スケジューラを非同期で開始する前に待機する秒数
      例外:
      SchedulerException
    • getScheduler

      public Scheduler getScheduler()
      クラスからコピーされた説明: SchedulerAccessor
      操作するスケジューラを決定するテンプレートメソッド。サブクラスによって実装されます。
      次で指定:
      クラス SchedulerAccessorgetScheduler 
    • getObject

      @Nullable public Scheduler getObject()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。

      BeanFactory と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。

      この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException をスローします。

      Spring 2.0 以降、FactoryBeans は null オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。

      次で指定:
      インターフェース FactoryBean<Scheduler>getObject 
      戻り値:
      Bean のインスタンス (null にすることができます)
      関連事項:
    • getObjectType

      public ClassSE<? extends Scheduler> getObjectType()
      インターフェースからコピーされた説明: FactoryBean
      この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。

      これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。

      シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。

      このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。

      注意 : オートワイヤーは、ここで null を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。

      次で指定:
      インターフェース FactoryBean<Scheduler>getObjectType 
      戻り値:
      この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は null 
      関連事項:
    • isSingleton

      public boolean isSingleton()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?

      注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject() から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true を返さないでください。

      FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。

      注意 false を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean インターフェースの実装は、SmartFactoryBean.isPrototype() メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean 実装は、isSingleton() 実装が false を返す場合、常に独立したインスタンスを返すと単純に想定されます。

      FactoryBean は通常シングルトンインスタンスを管理するため、デフォルトの実装は true を返します。

      次で指定:
      インターフェース FactoryBean<Scheduler>isSingleton 
      戻り値:
      公開されたオブジェクトがシングルトンかどうか
      関連事項:
    • start

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

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

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

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

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

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

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

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

      次で指定:
      インターフェース Lifecyclestop 
      例外:
      SchedulingException
      関連事項:
    • isRunning

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

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

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

      public void destroy() throws SchedulerException
      Bean ファクトリシャットダウン時に Quartz スケジューラをシャットダウンし、スケジュールされたすべてのジョブを停止します。
      次で指定:
      インターフェース DisposableBeandestroy 
      例外:
      SchedulerException