3 つの異なる開始条件を使用すると、自動化を事前にスケジュール設定できます。
最初の Time.ScheduledTimeEvent では、将来の特定の瞬間に 1 回だけ、または定期的に、時計の時刻または太陽イベント(日の出または日の入り)に基づいて自動化を開始するようスケジュールを設定できます。
たとえば、この開始条件では、毎日午後 10 時に自動化が開始されます。
starter<_>(structure, Time.ScheduledTimeEvent) { parameter(Time.ScheduledTimeEvent.clockTime(LocalTime.of(22, 0, 0, 0))) }
また、時計の時刻の代わりに太陽時のイベントを指定することもできます。このタイプのスターターのパラメータは、次の要素で構成される SolarTimeStruct です。
type(SolarTimeType.SunriseまたはSolarTimeType.Sunset)offset。これにより、太陽光イベントを基準として開始時間を任意の時間だけずらすことができます。正の値は太陽イベントの後に遅延を発生させ、負の値は太陽イベントの前にスターターをトリガーします。
次の例は、毎日日の出の 15 分前に自動化を開始するスターターです。
starter<_>(structure, Time.ScheduledTimeEvent) { parameter( Time.ScheduledTimeEvent.solarTime( SolarTimeStruct(SolarTimeType.Sunrise, java.time.Duration.ofMinutes(-15)) ) ) }
残りの 2 つの開始条件は定期的なスケジュール設定イベントの開始条件です。これにより、時間ベースとカレンダー ベースの両方の条件を含む、より具体的な条件に従って定期的に実行される自動化を作成できます。
Time.RecurringClockTimeScheduledEvent
を使用すると、1 つ以上の時間または日付の条件に基づいて自動化をスケジュールできます。このスターターは、Unix の cron ユーティリティで使用される構文に似た構文を使用して、定期的な自動化のスケジュールを指定します。
Time.RecurringSolarTimeScheduledEvent
を使用すると、日の出または日の入りの時刻に基づいて自動化をスケジュールできます。必要に応じて、カレンダー ベースの条件と組み合わせることもできます。
cron 式
Unix システムと Linux システムで定期的なジョブのスケジュール設定に使用されるコマンド cron については、すでにご存じかもしれません。
定期的なスケジュール設定イベントのスターターは、cron で使用されるものと同様のスケジュール設定式構文を使用します。このため、これらのスターターで使用されるスケジュール設定式は cron 式と呼ばれます。
cron にはいくつかの「フレーバー」があり、これらの実装間で構文のバリエーションがいくつかあります。定期的なスケジュール設定イベントのスターター cron 式は、Quartz スケジューラと同じ構文を使用します。Quartz cron 式の構文については、Quartz の CronExpression のドキュメントをご覧ください。
例
例をいくつか示します。
| ユースケース | 秒 | 分 | 時間 | Day-of-Month | 月 | Day-of-Week | 年 |
|---|---|---|---|---|---|---|---|
| 24 時間ごとに午前 0 時に実行する | 0 |
0 |
0 |
? |
* |
* |
* |
| 毎週火曜日の午前 6 時に実行 | 0 |
30 |
19 |
? |
* |
3 |
* |
| 2 月の毎時 15 分に実行する | 0 |
15 |
* |
? |
2 |
* |
* |
| 1 時間に 1 回実行 | 0 |
0 |
* |
? |
* |
* |
* |
| 1 月から 3 月まで、毎月 1 日に最も近い平日の午前 0 時に 24 時間ごとに実行する | 0 |
0 |
0 |
? |
1-3 |
1W |
* |
| 2 月の第 2 木曜日の毎時 15 分に 1 回 | 0 |
15 |
* |
? |
2 |
5#2 |
* |
| 2 月の月末日の毎時 15 分に実行 | 0 |
15 |
* |
L |
2 |
? |
* |
| 毎週火曜日と木曜日の午前 6 時に実行する | 0 |
30 |
19 |
? |
* |
3,5 |
* |
RecurringClockTimeScheduledEvent
RecurringClockTimeScheduledEvent スターターでは、cron 式文字列が Time.RecurringClockTimeScheduledEvent.cronExpression フィールドに割り当てられます。
次の例は、4 月の毎週水曜日の午後 8 時に自動化を開始する RecurringClockTimeScheduledEvent スターターの例です。
starter<_>(structure, event = Time.RecurringClockTimeScheduledEvent) { parameter(Time.RecurringClockTimeScheduledEvent.cronExpression("0 0 20 ? 4 4 *")) }
RecurringSolarTimeScheduleEvent
RecurringSolarTimeScheduleEvent スターターは 2 つのパラメータを取ります。
SolarTimeStruct。cronExpression: 日、月、曜日、年のフィールドのみで構成されるcron式のサブセット。自動化が開始される正確な時間は太陽時で決まるため、[秒]、[分]、[時] の各フィールドは省略されます。
次の例は、4 月の毎週水曜日の日の出の 1 時間後に自動化を開始するスターターです。
starter<_>(structure, event = Time.RecurringSolarTimeScheduledEvent) { parameter( Time.RecurringSolarTimeScheduledEvent.solarTime( TimeTrait.SolarTimeStruct(SolarTimeType.Sunrise, Duration.ofHours(1)) ) ) parameter(Time.RecurringSolarTimeScheduledEvent.cronExpression("? 4 4 *")) }