インターフェース ZonedTrigger

すべてのスーパーインターフェース:
Trigger
すべての既知の実装クラス:
CronTrigger

public interface ZonedTrigger extends Trigger
トリガーを使用すると、アプリケーション開発者は、タスクを実行するタイミングと頻度に関するルールを組み込むことができます。トリガーは、単一の絶対日時のように単純にすることも、Jakarta™ EE ビジネスカレンダーロジックを含めることもできます。トリガーの実装は、アプリケーション開発者によって作成され (または外部からアプリケーションに提供される場合があります)、スケジュールメソッドのいずれかを使用して ManagedScheduledExecutorService に送信されるときにタスクに登録されます。各メソッドは、未指定のコンテキストで実行されます。メソッドは、ContextService を使用してコンテキストプロキシオブジェクトを作成することにより、コンテキスト化できます。

各トリガーインスタンスは、それが登録されたのと同じプロセス内で呼び出されます。

例:

 /**
  * A trigger that runs on the hour, Mon-Fri from 8am-8pm Central US time.
  */
  public class HourlyDuringBusinessHoursTrigger implements ZonedTrigger {
      static final ZoneId ZONE = ZoneId.of("America/Chicago");

      public ZoneId getZoneId() {
          return ZONE;
      }

      public ZonedDateTime getNextRunTime(LastExecution lastExec, ZonedDateTime taskScheduledTime) {
          ZonedDateTime prevTime = lastExec == null ? taskScheduledTime : lastExec.getRunEnd(ZONE);
          ZonedDateTime nextTime = prevTime.truncatedTo(ChronoUnit.HOURS).plusHours(1);
          DayOfWeek day = nextTime.getDayOfWeek();
          if (day.equals(DayOfWeek.SATURDAY) || day.equals(DayOfWeek.SUNDAY)) {
              nextTime = nextTime.truncatedTo(ChronoUnit.DAYS).plusDays(1).withHour(8);
          } else { // Mon-Fri 8am-8pm
              int hour = nextTime.getHour();
              if (hour< 8)
                  nextTime = nextTime.plusHours(8 - hour);
              else if (hour> 20)
                  nextTime = nextTime.truncatedTo(ChronoUnit.DAYS)
                                     .plusDays(day.equals(DayOfWeek.FRIDAY) ? 3 : 1)
                                     .withHour(8);
          }
          return nextTime;
      }
  }
 

導入:
3.0
  • 方法の詳細

    • getNextRunTime

      ZonedDateTimeSE getNextRunTime(LastExecution lastExecutionInfo, ZonedDateTimeSE taskScheduledTime)
      次回タスクを実行する時間を取得します。
      パラメーター:
      lastExecutionInfo - タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。
      taskScheduledTime - タスクをスケジュールするために ManagedScheduledExecutorService.schedule メソッドが呼び出された日時。
      戻り値:
      タスクの次の実行を開始する日付 / 時刻。
    • getNextRunTime

      default DateSE getNextRunTime(LastExecution lastExecutionInfo, DateSE taskScheduledTime)
      次回タスクを実行する時間を取得します。

      このメソッドは、Trigger との互換性を維持するために提供されており、実装しないでください。デフォルトの実装は、ZonedDateTime を受け入れて返すメソッドシグネチャーに委譲します。

      次で指定:
      インターフェース Trigger 内の getNextRunTime 
      パラメーター:
      lastExecutionInfo - タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。
      taskScheduledTime - タスクをスケジュールするために ManagedScheduledExecutorService.schedule メソッドが呼び出された日時。
      戻り値:
      タスクの次の実行を開始する日付 / 時刻。
      例外:
      IllegalArgumentExceptionSE - 次回の実行時間が Date として表すには大きすぎる場合。
    • getZoneId

      default ZoneIdSE getZoneId()
      getNextRunTime および skipRun メソッドに提供される ZonedDateTimeSE に使用するタイムゾーンを返します。

      デフォルトの実装は、システムのデフォルトのタイムゾーンを返します。このトリガー内のビジネスロジックが記述されているのと同じタイムゾーンでサーバーが実行されていない可能性がある場合は常に、オーバーライドする必要があります。

      戻り値:
      このトリガーの操作に使用するタイムゾーン。
    • skipRun

      default boolean skipRun(LastExecution lastExecutionInfo, ZonedDateTimeSE scheduledRunTime)
      この実行インスタンスをスキップする必要がある場合は true を返します。

      これは、タスクが遅れているために実行すべきでない場合、またはタスクが一時停止または一時停止されている場合に役立ちます。

      このタスクがスキップされると、Future の結果の状態は SkippedException をスローします。未チェックの例外は SkippedException でラップされます。

      デフォルトの実装では false が返されるため、スキップされた実行のサポートが必要ない場合は、このメソッドの実装はオプションになります。

      パラメーター:
      lastExecutionInfo - タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。
      scheduledRunTime - タスクの実行が開始される予定の日時。
      戻り値:
      タスクをスキップして再スケジュールする必要がある場合は true。
    • skipRun

      default boolean skipRun(LastExecution lastExecutionInfo, DateSE scheduledRunTime)
      この実行インスタンスをスキップする必要がある場合は true を返します。

      このメソッドは、Trigger との互換性を維持するために提供されており、実装しないでください。デフォルトの実装は、ZonedDateTime を受け入れるメソッドシグネチャーに委譲します。

      次で指定:
      インターフェース Trigger 内の skipRun 
      パラメーター:
      lastExecutionInfo - タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。
      scheduledRunTime - タスクの実行が開始される予定の日時。
      戻り値:
      タスクをスキップして再スケジュールする必要がある場合は true。