クラス 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 式から判断できない場合。
      • 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 スケジュールに従った次の日付 / 時刻、または一致する場合は元の時刻。