ホームページ  >  記事  >  Java  >  Spring に基づいた最も単純なスケジュールされたタスクの実装と構成に基づいた cron 式の関連コンテンツ

Spring に基づいた最も単純なスケジュールされたタスクの実装と構成に基づいた cron 式の関連コンテンツ

PHP中文网
PHP中文网オリジナル
2017-06-22 11:32:251437ブラウズ

当初、この記事はこのシリーズの最初の 2 つの記事と一緒に公開される予定でした。しかし、昨日情報を調べてまとめているときにアクシデントに遭遇したので、少し延期してしまいました。

この記事の内容は主にこのブログ投稿 (cron 表現で 1 位にランクされている Baidu 検索リンク) を参照しています。他の人とはちょっと違うことを書いてみてください。ただし、内容はほとんど同じです。

例から始めましょう:

「0 0 10,14,16 * *?」とはどういう意味ですか?

まず、Cron 式は文字列であるため、文字列は 5 つまたは 6 つのスペースで区切られ、6 つまたは 7 つのフィールドに分割されます。Cron には次の 2 つの構文形式があります:

時間 Dayofmonth Month Dayofweek Year または
Seconds MINUTES HOURS DAYOFMONTH MONTH MONTH DAYOFWEEK

" 10 , 14, 16 here "," はリスト、列挙を意味し、10、14、16 時間に達するたびに実行されることを意味します、次の * は、分単位でドメインが * を使用している場合、このフィールドに一致する任意の値を意味することを意味します。これは、イベントが 1 分ごとにトリガーされることを意味します。

「0 0 10,14,16 * * ?」の最後の「?」は、DayofMonth と DayofWeek の 2 つのフィールドでのみ使用できます。また、ドメインの任意の値とも一致しますが、一致しません。 DayofMonth と DayofWeek は相互に影響を与えるためです。たとえば、毎月 20 日にスケジュールをトリガーする場合、20 日が何曜日であっても、次の記述のみを使用できます: 13 13 15 20 * ? (最後の数字のみ使用可能) ? , ただし、* は使用できません。* を使用すると、曜日に関係なくトリガーされることを意味しますが、実際はそうではありません。

つまり、「 0 0 10,14,16 * * ? 」は、毎日 10 時、14 時、16 時にトリガーされることを意味します。

それでは、次の質問です:

「0 0/30 9-17 * * ?」

この式では、前の式と比べて記号が 2 つ増えています。1 つは「/」、もう 1 つは「 -」。それらの意味は次のとおりです:

"-": 範囲を示します。たとえば、[分] フィールドで 5-20 を使用すると、5 分から 20 分まで 1 分ごとにトリガーされることを意味します
"/": トリガーが開始時刻から開始されることを示しますたとえば、[分] フィールドで 5/20 を使用すると、5 分ごとに 1 回、25 分、45 分ごとに 1 回トリガーされることを意味します。

したがって、ここでは「0/30」 「」は0分から30分ごとを意味します 1分に1回実行されます。また、「9-17」は範囲を示します。つまり、9 時から 17 時までに実行されます。まとめると、「0 0/30 9-17 * * ?」ということは、毎日9時から17時まで30分ごとに実行されることを意味します。题 続けて、次の質問です。

ここの式には、水曜日の略語である「WED」が追加されています。これはテスト結果です。 (テストしやすいように、時間を 10 秒ごとに変更します)

この記事の残りの cron 式は、前の 2 つの記事のスケジュールされたタスクでテストおよび検証できます。残りの式は 1 つずつ分析されません。以下は、いくつかの質問に答えることを期待して原文を引用します:

1. Cron 式の内容分析

Cron 式は文字列であり、文字列は 5 つまたは 6 つのスペースで区切られ、6 つまたは 7 つに分割されます。 Cron には次の 2 つの文法形式があります:

Seconds Minuteshour DayofMonth Month DayofWeek Year または

Seconds Minuteshour DayofMonth Month DayofWeek
各フィールドに使用できる文字は次のとおりです。秒: 4 つの文字「, - * /」を使用でき、有効な範囲は 0 ~ 59 の整数です。

分: 4 つの文字「, - * /」を使用でき、有効な範囲は 0 ~ 59 の整数です。

時間: ", - * /" 4 文字、有効範囲 0 ~ 23 の整数を出現可能
DayofMonth: 出現可能 ", - * / ? L W C" 8 文字、有効範囲 0-31 の整数
Month: 出現可能", - * / "4 文字、有効範囲 1 ~ 12 の整数、または JAN-DEc
DayofWeek: 表示可能 ", - * / ? L C #" 4 文字、有効範囲 1- の整数7 または SUN-SAT の 2 つの範囲。 1 は日曜日を意味し、2 は月曜日を意味します。以下同様です。
年: 4 つの文字「, - * /」を使用できます。有効な範囲は 1970 年から 2099 年です。ただし、次の特殊文字も使用できます。意味は次のとおりです:
(1)*: このフィールドの任意の値と一致することを示します。 * が Minutes フィールドで使用されている場合、イベントが 1 分ごとにトリガーされることを意味します。

(2)?: DayofMonth フィールドと DayofWeek フィールドでのみ使用できます。また、ドメインの任意の値とも一致しますが、一致しません。 DayofMonth と DayofWeek は相互に影響を与えるためです。たとえば、毎月 20 日にスケジュールをトリガーする場合、20 日が何曜日であっても、次の記述のみを使用できます: 13 13 15 20 * ? (最後の数字のみ使用可能) ? , ただし、* は使用できません。* を使用すると、曜日に関係なくトリガーされることを意味しますが、実際はそうではありません。

(3)-: 範囲を示します。たとえば、[分] フィールドで 5-20 を使用すると、5 分から 20 分まで毎分トリガーすることを意味します。一定の間隔で、たとえば、[分] フィールドに 5/20 を使用すると、5 分ごとに 1 回トリガーされ、25 分、45 分ごとに 1 回トリガーされることを意味します。

(5),: は列挙値をリストすることを意味します。たとえば、[分] フィールドに 5,20 を使用すると、毎分 5 分と 20 分にトリガーされることを意味します。

(6)L: 最後を意味し、DayofWeek フィールドと DayofMonth フィールドにのみ表示できます。DayofWeek フィールドで 5L が使用されている場合、最後の木曜日にトリガーされることを意味します。

(7)W: 有効な営業日 (月曜日から金曜日) を示します。これは DayofMonth フィールドにのみ表示され、指定された日付に最も近い有効な営業日にイベントがトリガーされます。たとえば、DayofMonth に 5W を使用すると、5 日が土曜日の場合、最も近い営業日、つまり 4 日の金曜日にトリガーされます。 5 日が日曜日の場合は 6 日(月曜日)にトリガーされ、5 日が月曜日から金曜日のいずれかの場合は 5 日にトリガーされます。もう 1 つの点は、W の最新の検索は月にまたがることはありません

(8)LW: これら 2 つの文字を一緒に使用して、特定の月の最後の営業日、つまり最後の金曜日を示すことができます。

(9)#: 各月の曜日を決定するために使用され、DayofMonth フィールドにのみ表示されます。例えば4#2では、ある月の第2水曜日を指します。

いくつかの例:

0 0 2 1 * ? * は毎月 1 日の午前 2 時にタスクをスケジュールすることを意味します

0 15 10 ? * MON-FRI は月曜日から金曜日まで毎日午前 10 時 15 分にジョブを実行することを意味しますFriday
0 15 10 ? 6L 2002-2006 は、2002 年から 2006 年までの毎月の最終金曜日の午前 10 時 15 分に操作を実行することを意味します。 cron 式には、スペースで区切られた少なくとも 6 つ (おそらく 7 つ) の時刻要素が含まれます。
順序:
秒 (0~59)

分 (0~59)

時間 (0~23)
日 (月) (0~31 ただし、月の日数を考慮する必要があります)
月(0~11)
日(週) (1~7 1=SUNまたはSUN、MON、TUE、WED、THU、FRI、SAT)
年(1970-2099)

各要素は値(例: 6) 、連続間隔 (9-12)、間隔 (8-18/4) (/ は 4 時間ごとを意味します)、リスト (1、3、5)、ワイルドカード。 2 つの要素「日」と「曜日」は相互に排他的であるため、どちらかを設定する必要があります。


一部の部分式には範囲またはリストを含めることができます

例: 部分式 式 (day (週)) は、「月-金」、「月、水、金」、「月-水、土」です

「*」文字はすべての可能な値を表します

したがって、「*」はサブにあります- 式(month)は各月の意味を表し、部分式(day(week))の「*」は各曜日を表します

「/」文字は、月の増分を指定するために使用されます。値

例: 式 (分) の部分式「0/15」は、0 分から開始することを意味し、15 分ごと

部分式 (分) の「3/20」は、3 番目から開始することを意味します分、20 分ごと (それと「3、23、43」) は同じ意味です


「?」文字は、日 (月) と日 (週) の 2 つの部分式でのみ使用され、次のことを示します。値が指定されていません
2 つの部分式のいずれかが次の場合、競合を避けるために、別の部分式の値を「?」に設定する必要があります

「L」文字は、単語である day (month) と day (week) の 2 つの部分式。「last」の略語

ですが、2 つの部分式の意味は異なります。
日(月)の部分表現では、「L」は月の最終日を表します
日(週)の自己表現では、「L」は週の最後の日、つまりSATを表します

「L」の前に特定の内容がある場合は別の意味になります

例:「6L」は今月の月末から6日目、「FRIL」は今月の最終金曜日を意味します
注:「」を使用する場合は、 L" パラメータ。問題が発生する可能性があるため、リストまたは範囲を指定しないでください。

フィールドで許可される値 許可される特殊文字

秒 0-59 、 - * /

分 0-59 、 - * /
時間 0-23 、 - * /

日付 1 ~ 31、 - * ? / L W C

月 1 ~ 12 または 1 月 ~ 12 月、 - * /
週 1 ~ 7 または SUN ~ SAT、 - * / L C #
年 (オプション) , 1970-2099 , - * /



2. cron 式の例:

「0 0 12 * * ?」 毎日正午にトリガー
「0 15 10 ? * *」 毎日午前 10 時 15 分にトリガー
「0 15 10 * * ?」 「0 15 10 * * ? *」 毎日午前 10 時 15 分にトリガーされます
「0 15 10 * * ? 2005」 2005 年の毎日午前 10 時 15 分にトリガーされます
「0 * 14 * * ?」午後 2 時から午後 2 時 59 分まで 1 分ごとにトリガーします
「0 0/5 14 * * ?」 毎日午後 2 時から午後 2 時 55 分まで 5 分ごとにトリガーします
「0 0/5 14,18 * * ?」毎日午後 2 時から午後 2 時 55 分まで 午後 2 時 55 分から午後 6 時 55 分まで 5 分ごとにトリガーします
"0 0-5 14 * * ?" 毎日午後 2 時から午後 2 時 05 分まで 1 分ごとにトリガーします
"0 10, 44 14 ? 3 WED」は、3 月の毎週水曜日の午後 2 時 10 分と 2 時 44 分にトリガーされます
「0 15 10 ? * MON-FRI」は月曜日から金曜日の午前 10 時 15 分にトリガーされます
「0 15 10 15 * ? 「毎月 15 日の午前 10 時 15 分にトリガーされます
「0 15 10 L * ?」 毎月末日の午前 10 時 15 分にトリガーされます
「0 15 10 * 6L」 午前 10 時 15 分にトリガーされます毎月最終金曜日
「0 15 10 ? * 6L 2002-2005」 2002 年から 2005 年まで毎月最終金曜日の午前 10 時 15 分にトリガーされます
「0 15 10 ? * 6#3」 10 時にトリガーされます毎月第 3 金曜日の午前: 15 トリガー

以上がSpring に基づいた最も単純なスケジュールされたタスクの実装と構成に基づいた cron 式の関連コンテンツの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。