インターフェース ZonedTrigger
- すべてのスーパーインターフェース:
Trigger
- すべての既知の実装クラス:
CronTrigger
トリガーを使用すると、アプリケーション開発者は、タスクを実行するタイミングと頻度に関するルールを組み込むことができます。トリガーは、単一の絶対日時のように単純にすることも、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(LastExecution lastExecutionInfo, ZonedDateTimeSE taskScheduledTime) 次回タスクを実行する時間を取得します。default DateSEgetNextRunTime(LastExecution lastExecutionInfo, DateSE taskScheduledTime) 次回タスクを実行する時間を取得します。default ZoneIdSEdefault booleanskipRun(LastExecution lastExecutionInfo, ZonedDateTimeSE scheduledRunTime) この実行インスタンスをスキップする必要がある場合は true を返します。default booleanskipRun(LastExecution lastExecutionInfo, DateSE scheduledRunTime) この実行インスタンスをスキップする必要がある場合は true を返します。
方法の詳細
getNextRunTime
次回タスクを実行する時間を取得します。- パラメーター:
lastExecutionInfo- タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。taskScheduledTime- タスクをスケジュールするためにManagedScheduledExecutorService.scheduleメソッドが呼び出された日時。- 戻り値:
- タスクの次の実行を開始する日付 / 時刻。
getNextRunTime
次回タスクを実行する時間を取得します。このメソッドは、
Triggerとの互換性を維持するために提供されており、実装しないでください。デフォルトの実装は、ZonedDateTimeを受け入れて返すメソッドシグネチャーに委譲します。- 次で指定:
- インターフェース
Trigger内のgetNextRunTime - パラメーター:
lastExecutionInfo- タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。taskScheduledTime- タスクをスケジュールするためにManagedScheduledExecutorService.scheduleメソッドが呼び出された日時。- 戻り値:
- タスクの次の実行を開始する日付 / 時刻。
- 例外:
IllegalArgumentExceptionSE- 次回の実行時間がDateとして表すには大きすぎる場合。
getZoneId
getNextRunTimeおよびskipRunメソッドに提供されるZonedDateTimeSE に使用するタイムゾーンを返します。デフォルトの実装は、システムのデフォルトのタイムゾーンを返します。このトリガー内のビジネスロジックが記述されているのと同じタイムゾーンでサーバーが実行されていない可能性がある場合は常に、オーバーライドする必要があります。
- 戻り値:
- このトリガーの操作に使用するタイムゾーン。
skipRun
この実行インスタンスをスキップする必要がある場合は true を返します。これは、タスクが遅れているために実行すべきでない場合、またはタスクが一時停止または一時停止されている場合に役立ちます。
このタスクがスキップされると、Future の結果の状態は
SkippedExceptionをスローします。未チェックの例外はSkippedExceptionでラップされます。デフォルトの実装では
falseが返されるため、スキップされた実行のサポートが必要ない場合は、このメソッドの実装はオプションになります。- パラメーター:
lastExecutionInfo- タスクの最後の実行に関する情報。タスクがまだ実行されていない場合、この値は null になります。scheduledRunTime- タスクの実行が開始される予定の日時。- 戻り値:
- タスクをスキップして再スケジュールする必要がある場合は true。
skipRun
この実行インスタンスをスキップする必要がある場合は true を返します。このメソッドは、
Triggerとの互換性を維持するために提供されており、実装しないでください。デフォルトの実装は、ZonedDateTimeを受け入れるメソッドシグネチャーに委譲します。