クラス CronTrigger

java.lang.ObjectSE
jakarta.enterprise.concurrent.CronTrigger
実装されているすべてのインターフェース:
TriggerZonedTrigger

public class CronTrigger extends ObjectSE implements ZonedTrigger

Cron ベースの Trigger 実装。単一のスペース文字で区切られた 5 つまたは 6 つのフィールドと ZoneIdSE をサポートします。基本的な cron 構文がサポートされています。より高度なシナリオでは、この実装をサブクラス化するか、独自の Trigger 実装で複数の CronTrigger インスタンスを組み合わせることができます。

Cron 式フィールド
秒 (オプション)0-59, *. 不在時は 0 とする
0-59, *
時間 0-23, *
dayOfMonth0-31, *、L
1-12、1 月~ 12 月、1 月~ 12 月、*
曜日 SUN-SAT、Sunday-Saturday、0-7, *. 0 および 7 は両方とも日曜日を表します。0 は週の最初の曜日を指定し、7 は DayOfWeekSE との一貫性を示します。

Cron 式構文
, すべてのフィールドのリストを区切ります。例: MON,WED,FRI または MAY,SEP
- すべてのフィールドの範囲を区切ります。例: MON-FRI または 9-17
/dayOfWeek を除くすべてのフィールドの繰り返し増分を指定します。例: hours フィールドの 6/7 は 6,13,20 と同等です。
# 序数の曜日を指定します。例: FRI#1,SAT#L は、月の最初の金曜日と最後の土曜日です。
# は、範囲 (-) およびインクリメント (/) 内では使用できません。
* 任意の値が許可されることを示します。
L 月の最終日を示します。2L は最後から 2 番目の日を示し、以下同様です。

Cron 式の例
0 * * * * 毎正時
0 9-17 * * MON-FRI 平日の午前 9 時から午後 5 時まで、毎正時
0 13/3 * MAY-SEP SAT,SUN5 月から 9 月までの週末、午後 1 時から 3 時間ごと
30 10 * APR,AUG TUE#2,TUE#L4 月と 8 月の第 2 および最終火曜日の午前 10 時 30 分
15 22 4 10,20,L * * 毎月 10 日、20 日、末日の 4:22:15 AM
0 8-11,13-16 2L JAN-MAR *1 月、2 月、3 月の最後から 2 番目の日の午前 8 時から午前 11 時までと午後 1 時から午後 4 時まで

上記のような cron 式とタイムゾーン ID を受け入れるコンストラクターが提供されます。元:

 trigger = new CronTrigger("0 7 * SEP-MAY MON-FRI", ZoneId.of("America/New_York"));
 

別のコンストラクターを使用すると、cron フィールドを流れるような方法で任意の順序で指定できます。元:

 trigger = new CronTrigger(ZoneId.of("America/Los_Angeles"))
           .months(Month.DECEMBER)
           .daysOfMonth(24)
           .hours(16, 18);
 

このトリガーの getNextRunTime メソッドは、cron スケジュールに基づいて次回の実行時間を決定します。skipRun メソッドは、サブクラスによってオーバーライドされない限り、常に false を返します。

cron 式フィールドを構成するこのクラスのメソッドは、スレッドセーフではありません。ManagedScheduledExecutorService に供給される前に CronTrigger の初期化が行われ、その後 CronTrigger が変更されないようにするのは、呼び出し元の責任です。

CronTrigger をサブクラス化して、より複雑なロジックを提供することができます。たとえば、次の 2 つのトリガーを組み合わせて月 2 回の給与計算を月の 15 日と最終日、または前者が週末になる前の金曜日にスケジュールします。

 public class PayrollTrigger extends CronTrigger {
     private final CronTrigger fridaysBeforeWeekendPayrollDay;

     PayrollTrigger() {
         // Every 15th and last day of the month that is a weekday,
         super("0 10 15,L * MON-FRI", ZoneId.of("America/Chicago"));

         // Every 13th, 14th, third-to-last, and second-to-last day of the month that is a Friday,
         fridaysBeforeWeekendPayrollDay = new CronTrigger(
                 "0 10 13,14,3L,2L * FRI", getZoneId());
     }

     public ZonedDateTime getNextRunTime(LastExecution lastExec, ZonedDateTime scheduledAt) {
         ZonedDateTime time1 = super.getNextRunTime(lastExec, scheduledAt);
         ZonedDateTime time2 = fridaysBeforeWeekendPayrollDay.getNextRunTime(lastExec, scheduledAt);
         return time1.isBefore(time2) ? time1 : time2;
     }
 }
 
導入:
3.0
  • コンストラクターの詳細

    • CronTrigger

      public CronTrigger(StringSE cron, ZoneIdSE zone)
      cron 式を受け入れるコンストラクター。
      パラメーター:
      cron - cron 式。
      zone - getNextRunTime および skipRun メソッドに提供される ZonedDateTimeSE に使用するタイムゾーン ID。Null は、システムのデフォルトを使用することを示します。
    • CronTrigger

      public CronTrigger(ZoneIdSE zone)
      流れるような構成パターンのコンストラクター。秒、分、時間のデフォルトは 0 です。残りのフィールドのデフォルトは * です。
      パラメーター:
      zone - getNextRunTime および skipRun メソッドに提供される ZonedDateTimeSE に使用するタイムゾーン ID。Null は、システムのデフォルトを使用することを示します。
  • メソッドの詳細

    • getNextRunTime

      public ZonedDateTimeSE getNextRunTime(LastExecution lastExecutionInfo, ZonedDateTimeSE taskScheduledTime)
      cron スケジュールを使用し、最新の実行の終了に基づいて (またはそれがない場合は、最初のスケジュール時間)、次にタスクを実行する時間を取得します。
      次で指定:
      インターフェース ZonedTriggergetNextRunTime 
      パラメーター:
      lastExecutionInfo - タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。
      taskScheduledTime - タスクをスケジュールするために ManagedScheduledExecutorService.schedule メソッドが呼び出された日時。
      戻り値:
      タスクの次の実行を開始する日付 / 時刻。
      例外:
      DateTimeExceptionSE - 次回が cron 式から判断できない場合。
    • getZoneId

      public final ZoneIdSE getZoneId()
      getNextRunTime および skipRun メソッドに提供される ZonedDateTimeSE に使用するタイムゾーンを返します。
      次で指定:
      インターフェース ZonedTriggergetZoneId 
      戻り値:
      このトリガーの操作に使用するタイムゾーン。
    • daysOfMonth

      public CronTrigger daysOfMonth(int... d)
      day-of-month cron フィールドを構成し、以前の day-of-month の値を上書きします。
      パラメーター:
      d - 1 から 31 までの 1 つ以上の日数。
      戻り値:
      このインスタンス。
    • daysOfMonth

      public CronTrigger daysOfMonth(StringSE d)
      day-of-month cron フィールドを構成し、以前の day-of-month の値を上書きします。
      パラメーター:
      d - dayOfMonth cron フィールド。例: 15,L
      戻り値:
      このインスタンス。
    • daysOfWeek

      public CronTrigger daysOfWeek(DayOfWeekSE... d)
      曜日の以前の値を上書きして、曜日の cron フィールドを構成します。
      パラメーター:
      d - 1 週間のうち 1 日以上。
      戻り値:
      このインスタンス。
    • daysOfWeek

      public CronTrigger daysOfWeek(StringSE d)
      曜日の以前の値を上書きして、曜日の cron フィールドを構成します。
      パラメーター:
      d - dayOfWeek cron フィールド。例: MON-FRI,SAT#L
      戻り値:
      このインスタンス。
    • hours

      public CronTrigger hours(int... h)
      時間の以前の値を上書きして、時間の cron フィールドを構成します。
      パラメーター:
      h - 0 から 23 までの 1 つ以上の時間の値。
      戻り値:
      このインスタンス。
    • hours

      public CronTrigger hours(StringSE h)
      時間の以前の値を上書きして、時間の cron フィールドを構成します。
      パラメーター:
      h - 時間の cron フィールド。例: 午前 9 時から午後 5 時までの 9-17
      戻り値:
      このインスタンス。
    • minutes

      public CronTrigger minutes(int... m)
      分の cron フィールドを構成し、以前の分の値を上書きします。
      パラメーター:
      m - 0 から 59 までの 1 つ以上の分の値。
      戻り値:
      このインスタンス。
    • minutes

      public CronTrigger minutes(StringSE m)
      分の cron フィールドを構成し、以前の分の値を上書きします。
      パラメーター:
      m - 分 cron フィールド。例: 正時 5 分から始まる 10 分間隔の 5/10 (:05, :15, :25, :35, :45, :55)。
      戻り値:
      このインスタンス。
    • months

      public CronTrigger months(MonthSE... m)
      月の以前の値を上書きして、月の cron フィールドを構成します。
      パラメーター:
      m - 1 か月以上。
      戻り値:
      このインスタンス。
    • months

      public CronTrigger months(StringSE m)
      月の cron フィールドを構成し、月の以前の値を上書きします。
      パラメーター:
      m - 月 cron フィールド。例: SEP-NOV,FEB-MAY
      戻り値:
      このインスタンス。
    • seconds

      public CronTrigger seconds(int... s)
      秒の cron フィールドを構成し、秒の以前の値を上書きします。
      パラメーター:
      s - 0 から 59 までの 1 つ以上の秒の値。
      戻り値:
      このインスタンス。
    • seconds

      public CronTrigger seconds(StringSE s)
      秒の cron フィールドを構成し、秒の以前の値を上書きします。
      パラメーター:
      s - 秒 cron フィールド。例: 30.
      戻り値:
      このインスタンス。
    • toString

      public StringSE toString()
      CronTrigger の読みやすい表現。フィールドをリスト形式で表示するか、簡潔にするために * 文字を使用して表示します。

      以下に例を示します。

      CronTrigger@89abcdef seconds 0, minutes 0, hours 9, *, months 3,6,9,12, SAT#2,SAT#4
      オーバーライド:
      クラス ObjectSEtoString 
      戻り値:
      解析された cron 式の読み取り可能な表現。
    • next

      protected ZonedDateTimeSE next(ZonedDateTimeSE from)
      cron スケジュールに従って、次の日時に進みます。
      パラメーター:
      from - 次回を計算する日付 / 時刻。
      戻り値:
      cron スケジュールに従った次の日付 / 時刻、または一致する場合は元の時刻。