アノテーションインターフェース Scheduled


スケジュールされるメソッドをマークするアノテーション。定期タスクの場合、cron()fixedDelay()、または fixedRate() 属性のいずれかを指定する必要があり、さらにオプションの initialDelay() も指定する必要があります。1 回限りのタスクの場合は、initialDelay() を指定するだけで十分です。

アノテーション付きメソッドは引数を受け入れてはなりません。通常、戻り値の型は void になります。そうでない場合、スケジューラを通じて呼び出されたときに戻り値は無視されます。

リアクティブ Publisher またはデフォルトの ReactiveAdapterRegistry によって Publisher に適応できる型を返すメソッドがサポートされています。Publisher は、複数の後続のサブスクリプションをサポートする必要があります。返される Publisher は 1 回だけ生成され、スケジューリングインフラストラクチャは設定に従って定期的にそれをサブスクライブします。パブリッシャーによって発行された値は無視されます。エラーは WARN レベルで記録されますが、さらなる反復は妨げられません。固定遅延が構成されている場合、固定遅延のセマンティクスを考慮するためにサブスクリプションはブロックされます。

実行時にコルーチンリアクターブリッジ (kotlinx.coroutine.reactor) が存在する場合、Kotlin サスペンド関数もサポートされます。このブリッジは、リアクティブメソッドの場合と同じように処理される Publisher にサスペンド機能を適合させるために使用されます (上記を参照)。

@Scheduled アノテーションの処理は、ScheduledAnnotationBeanPostProcessor を登録することによって実行されます。これは、手動で実行することも、<task:annotation-driven/> XML 要素または @EnableScheduling アノテーションを介して実行する方が便利です。

このアノテーションは繰り返し可能なSEアノテーションとして使用できます。同じメソッドで複数のスケジュールされた宣言が見つかった場合、それぞれ独立して処理され、それぞれに対して個別のトリガーが起動されます。結果として、そのような同じ場所に配置されたスケジュールは重複し、並行してまたはすぐに連続して複数回実行される可能性があります。

このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。

導入:
3.0
作成者:
Mark Fisher, Juergen Hoeller, Dave Syer, Chris Beams, Victor Brown, Sam Brannen
関連事項:
  • フィールドの詳細

    • CRON_DISABLED

      static final StringSE CRON_DISABLED
      無効なトリガーを示す特別な cron 式値: "-"。

      これは、主に ${...} プレースホルダーで使用するためのもので、対応するスケジュールされたメソッドを外部で無効にすることができます。

      導入:
      5.1
      関連事項:
  • 要素の詳細

    • cron

      StringSE cron
      cron のような表現で、通常の UN*X 定義を継承して、秒、分、時間、日、月、曜日のトリガーを含めます。

      例: "0 * * * * MON-FRI" は、平日の 1 分間に 1 回(その分で -0 秒)を意味します。

      左から右に読み取られるフィールドは、次のように解釈されます。

      • 時間
      • 月の日
      • 曜日

      特別な値 "-" は、主に ${...} プレースホルダーによって解決される外部で指定された値を対象とした無効な cron トリガーを示します。

      戻り値:
      cron スケジュールに解析できる式
      関連事項:
      デフォルト:
      ""
    • zone

      StringSE zone
      cron 式が解決されるタイムゾーン。デフォルトでは、この属性は空の文字列です (つまり、スケジューラのタイムゾーンが使用されます)。
      戻り値:
      TimeZone.getTimeZone(String)SE によって受け入れられるゾーン ID、またはスケジューラのデフォルトのタイムゾーンを示す空の文字列
      導入:
      4.0
      関連事項:
      デフォルト:
      ""
    • fixedRate

      long fixedRate
      呼び出しの間隔を固定して、アノテーション付きメソッドを実行します。

      時間の単位はデフォルトでミリ秒ですが、timeUnit() を介してオーバーライドできます。

      戻り値:
      期間
      デフォルト:
      -1L
    • fixedRateString

      StringSE fixedRateString
      呼び出しの間隔を固定して、アノテーション付きメソッドを実行します。

      期間文字列にはいくつかの形式があります:

      • 単純な整数 - timeUnit() で上書きされない限り、デフォルトではミリ秒単位の期間を表すと解釈されます。(その場合は fixedDelay() を使用することをお勧めします)
      • 既知の DurationFormat.Style のいずれか: ISO8601 スタイルまたは SIMPLE スタイル - 文字列に明示的な単位が含まれていない場合は、timeUnit() をフォールバックとして使用します
      • 上記のいずれか、Spring スタイルの "${...}" プレースホルダーと SpEL 式を使用
      戻り値:
      ピリオドを文字列値として指定します。たとえば、プレースホルダ、java.time.Duration 準拠の値、simple format 準拠の値などです。
      導入:
      3.2.2
      関連事項:
      デフォルト:
      ""
    • fixedDelay

      long fixedDelay
      最後の呼び出しの終了から次の呼び出しの開始までの期間を固定して、アノテーション付きメソッドを実行します。

      時間の単位はデフォルトでミリ秒ですが、timeUnit() を介してオーバーライドできます。

      注: 仮想スレッドでは、固定遅延よりも固定レートと cron トリガーをお勧めします。固定遅延タスクは、SimpleAsyncTaskScheduler を使用して単一のスケジューラスレッドで動作します。

      戻り値:
      遅延
      デフォルト:
      -1L
    • fixedDelayString

      StringSE fixedDelayString
      最後の呼び出しの終了から次の呼び出しの開始までの期間を固定して、アノテーション付きメソッドを実行します。

      期間文字列にはいくつかの形式があります:

      • 単純な整数 - timeUnit() で上書きされない限り、デフォルトではミリ秒単位の期間を表すと解釈されます。(その場合は fixedDelay() を使用することをお勧めします)
      • 既知の DurationFormat.Style のいずれか: ISO8601 スタイルまたは SIMPLE スタイル - 文字列に明示的な単位が含まれていない場合は、timeUnit() をフォールバックとして使用します

      注: 仮想スレッドでは、固定遅延よりも固定レートと cron トリガーをお勧めします。固定遅延タスクは、SimpleAsyncTaskScheduler を使用して単一のスケジューラスレッドで動作します。

      戻り値:
      遅延を文字列値として指定します。たとえば、プレースホルダ、java.time.Duration 準拠の値、simple format 準拠の値などです。
      導入:
      3.2.2
      関連事項:
      デフォルト:
      ""
    • initialDelay

      long initialDelay
      fixedRate() または fixedDelay() タスクの最初の実行までに遅延する時間の単位数。

      時間の単位はデフォルトでミリ秒ですが、timeUnit() を介してオーバーライドできます。

      戻り値:
      初期
      導入:
      3.2
      デフォルト:
      -1L
    • initialDelayString

      StringSE initialDelayString
      fixedRate() または fixedDelay() タスクの最初の実行までに遅延する時間の単位数。

      期間文字列にはいくつかの形式があります:

      • 単純な整数 - timeUnit() で上書きされない限り、デフォルトではミリ秒単位の期間を表すと解釈されます。(その場合は fixedDelay() を使用することをお勧めします)
      • 既知の DurationFormat.Style のいずれか: ISO8601 スタイルまたは SIMPLE スタイル - 文字列に明示的な単位が含まれていない場合は、timeUnit() をフォールバックとして使用します
      • 上記のいずれか、Spring スタイルの "${...}" プレースホルダーと SpEL 式を使用
      戻り値:
      初期遅延を文字列値として指定します。たとえば、プレースホルダ、java.time.Duration 準拠の値、simple format 準拠の値などです。
      導入:
      3.2.2
      関連事項:
      デフォルト:
      ""
    • timeUnit

      TimeUnitSE timeUnit
      戻り値:
      使用する TimeUnit 
      導入:
      5.3.10
      デフォルト:
      MILLISECONDS
    • scheduler

      StringSE scheduler
      このスケジュールされたメソッドを実行するスケジューラを決定するための修飾子。

      デフォルトは空の文字列で、デフォルトのスケジューラを示します。

      特定の TaskScheduler または ScheduledExecutorServiceSE Bean 定義の修飾子の値 (または Bean 名) と照合して、使用するターゲットスケジューラを決定するために使用できます。

      導入:
      6.1
      関連事項:
      デフォルト:
      ""