cron式を作成するにはどうすればいいですか?

cron式の詳細については、以下を参照してください。
https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontrigger.html

はじめに

cronは古くからあるUNIXツールなので、そのスケジューリング機能は強力で実績があります。CronTriggerクラスは、cronのスケジューリング機能に基づいています。

CronTriggerは「cron式」を使用しており、次のような起動スケジュールを作成できます。

フォーマット

cron式は、空白で区切られた6つまたは7つのフィールドで構成される文字列です。フィールドには、許可された値のいずれかと、そのフィールドで許可された特殊文字のさまざまな組み合わせを含めることができます。フィールドは以下の通りです。

フィールド名 必須 許可される値 許可される特殊文字

Seconds YES 0-59 , - * /

分 YES 0~59 , - * /

時間 YES 0-23 , - * /

月の日付 YES 1-31 , - * ?/ L W

月 YES 1-12 または JAN-DEC , - * /。

曜日 YES 1-7 または SUN-SAT , - * ?/ L #

年 NO empty, 1970-2099 , - * / 。

そのため、cronの表現は以下のようにシンプルになります。* * * * ?*

またはもっと複雑な、こんな感じです。0/5 14,18,3-39,52 * ?1月、3月、9月、月-金 2002-2010

特殊文字

「*(「すべての値」)」:フィールド内のすべての値を選択するために使用します。例えば、分フィールドの「*」は「毎分」を意味します。

「?("no specific value")」:文字が許可されている2つのフィールドのうち、一方に何かを指定したいが、もう一方には指定したくない場合に便利です。 例えば、ある月の特定の日(例えば10日)にトリガーを実行したいが、その日が何曜日であっても構わない場合、day-of-monthフィールドに「10」を、day-of-weekフィールドに「?」を指定します。

「-」:範囲を指定するのに使用します。例えば、時間フィールドの「10-12」は「10、11、12時間目」を意味します。

「,」:追加の値を指定するのに使用します。例えば、曜日欄の "MON,WED,FRI "は、"月曜、水曜、金曜 "を意味します。

「/」:増分を指定するのに使用します。例えば、秒数欄の「0/15」は「0、15、30、45の秒数」を意味します。また、秒の欄に「5/15」と書くと、「5、20、35、50の各秒」という意味になります。 また、''の後に'/'を指定することもできます。この場合、''は'/'の前に'0'を指定したのと同じ意味になります。 月齢欄の「1/3」は、「その月の1日から3日ごとに実行する」という意味です。

「L("last")」 :許可されている2つのフィールドのそれぞれで異なる意味を持ちます。 例えば、月齢欄の "L "は「その月の最終日」を意味し、うるう年でない場合、1月は31日、2月は28日となります。Day-of-weekフィールドに単独で使用した場合、これは単に「7」または「SAT」を意味します。 しかし、曜日フィールドで他の値の後に使用された場合、それは「その月の最後の○○日」を意味し、例えば「6L」は「その月の最後の金曜日」を意味します。また、月の最終日からのオフセットを指定することもできます。 例えば、「L-3」は、その月の最後から3番目の日を意味します。L」オプションを使用する際には、リストや値の範囲を指定しないことが重要です。

「W("weekday")」:指定された日に最も近い平日(月〜金)を指定するために使用されます。 例えば、月齢フィールドの値として「15W」を指定した場合、その意味は「その月の15日に最も近い平日」となります。つまり、15日が土曜日の場合、トリガは14日の金曜日に実行します。 15日が日曜日の場合、トリガは16日の月曜日に実行されます。15日が火曜日の場合は、15日の火曜日に実行します。しかし、月の日の値として「1W」を指定し、1日が土曜日の場合、月の日の境界を「ジャンプ」しないため、トリガは3日の月曜日に実行します。 「W」文字は、day-of-monthが1日の場合にのみ指定でき、日の範囲やリストではありません。

L "と "W "の文字は、月別のフィールドでは "LW "となり、これは*"その月の最後の平日 "*となります。

「#」:月の "n番目 "のXXX日を指定するのに使用されます。例えば、曜日欄に「6#3」と入力すると、「その月の第3金曜日」という意味になります(6日目=金曜日、「#3」=その月の3番目)。 その他の例としては「2#1」=その月の第一月曜日、「4#5」=その月の第五水曜日。なお、「#5」を指定したときに、その月に指定した曜日が5つない場合は、その月の実行は行われません。

法則性のある文字や、月や曜日の名前は、大文字と小文字を区別しません。MONは、monと同じです。

いくつかの例を紹介します。

**式** **意味**

0 0 12 * * ? 毎日12時(正午)に実行

0 15 10 * * ?2005年 2005年の間、毎日午前10時15分に実行

0 * 14 * * ? 毎日午後2時から午後2時59分までの毎分実行

0 0/5 14 * * ? 毎日、14時から5分ごとに実行し、14時55分に終了

0 0/5 14,18 * * ? 毎日、14時から5分ごとに実行し、14時55分に終了し、18時から5分ごとに実行し、18時55分に終了

0 0-5 14 * * ? 毎日午後2時から1分ごとに実行し、午後2時5分に終了

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 L-2 * ? 毎月2日から最後の最終日の午前10時15分に実行

0 11 11 11 11 ? 毎年11月11日午前11時11分に実行。