LinuxとSpringのcron構文の違い
1. 概要
cron式を使用すると、特定の日時に定期的に実行するタスクをスケジュールできます。 Unixに導入された後、他のUnixベースのオペレーティングシステムとソフトウェアライブラリ(Spring Frameworkを含む)は、タスクスケジューリングにそのアプローチを採用しました。
このクイックチュートリアルでは、UnixベースのオペレーティングシステムとSpringFrameworkのCron式の違いを確認します。
2. UnixCron
ほとんどのUnixベースのシステムのCronには、分(0-59)、時間(0-23)、曜日(1-31)、月(1-12または名前)、および曜日(0〜7または名前)。
アスタリスク(*)のように、各フィールドにいくつかの特別な値を入れることができます。
5 0 * * *
ジョブは毎日深夜5分後に実行されます。 値の範囲を使用することも可能です。
5 0-5 * * *
ここで、スケジューラーは、毎日午前0時から5分後、および1、2、3、4、および5時から5分後にタスクを実行します。
または、値のリストを使用できます。
5 0,3 * * *
これで、スケジューラーは毎日午前0時から5分後、および3時から5分後にジョブを実行します。 オリジナルのCron式は、これまでに説明したものよりも多くの機能を提供します。
ただし、には大きな制限が1つあります。専用の2番目のフィールドがないため、2番目の精度でジョブをスケジュールすることはできません。
Springがこの制限をどのように修正するかを見てみましょう。
3. 春のcron
Springで定期的なバックグラウンドタスクをスケジュールするには、通常、Cron式を@Scheduledアノテーションに渡します。
UnixベースのシステムのCron式とは対照的に、 SpringのCron式には、秒、分、時、日、月、平日の6つのスペースで区切られたフィールドがあります。
たとえば、10秒ごとにタスクを実行するには、次のようにします。
*/10 * * * * *
また、毎日午前8時から午前10時まで20秒ごとにタスクを実行するには:
*/20 * 8-10 * * *
上記の例に示されているように、
実装の観点からは、 CronSequenceGenerator クラスは、SpringでのCron式の解析を担当します。
4. 結論
この短いチュートリアルでは、SpringとほとんどのUnixベースのシステムのCron実装の違いを見ました。 その過程で、両方の実装の例をいくつか見ました。
Cron式の例をもっと見るには、Cron式ガイドを確認することを強くお勧めします。 さらに、 CronSequenceGenerator クラスのソースコードを見ると、Springがこの機能をどのように実装しているかがわかります。