入力検証の一環として、これが本当に有効な cron 式であり、どのように実行されるかを考えていました。
0 0/0 * * * ?
Quartz 検証が true を返す
org.quartz.CronExpression.isValidExpression("0 0/0 * * * ?")
それで、これは常に実行されますか、決して実行されませんか、毎時間または毎分...?
入力検証の一環として、これが本当に有効な cron 式であり、どのように実行されるかを考えていました。
0 0/0 * * * ?
Quartz 検証が true を返す
org.quartz.CronExpression.isValidExpression("0 0/0 * * * ?")
それで、これは常に実行されますか、決して実行されませんか、毎時間または毎分...?
TriggerUtils.computeFireTimesBetween()を使用して結果を見つけることができます:
try {
CronTriggerImpl cron = new CronTriggerImpl();
cron.setStartTime(new Date());
cron.setCronExpression("0 0/0 * * * ?");
BaseCalendar calendar = new BaseCalendar();
List<Date> result = TriggerUtils.computeFireTimesBetween(cron, calendar, new Date(),DateBuilder.futureDate(1, IntervalUnit.DAY));
for (Date date : result) {
System.out.println(date);
}
} catch (ParseException e) {
e.printStackTrace();
}
出力は次のとおりです。
Thu Apr 05 18:00:00 CST 2012
Thu Apr 05 19:00:00 CST 2012
Thu Apr 05 20:00:00 CST 2012
Thu Apr 05 21:00:00 CST 2012
Thu Apr 05 22:00:00 CST 2012
Thu Apr 05 23:00:00 CST 2012
Fri Apr 06 00:00:00 CST 2012
Fri Apr 06 01:00:00 CST 2012
Fri Apr 06 02:00:00 CST 2012
Fri Apr 06 03:00:00 CST 2012
Fri Apr 06 04:00:00 CST 2012
.......................
したがって、0 0/0 * * * ?
は1時間ごとに0分0秒で実行されます。
CronTrigger チュートリアルのドキュメントによると:
/
- 増分を指定するために使用されます。たとえば、秒フィールドの「0/15」は、「0、15、30 、および 45 秒」を意味します。また、秒フィールドの「5/15」は、「5、20、35 、および 50 秒」を意味します。'' 文字の後に '/' を指定することもできます。この場合、'' は '/' の前に '0' があることと同じです。day-of-month フィールドの '1/3' は、「月の最初の日から 3 日ごとに発生する」ことを意味します。
これは0
、このコンテキストでは実際には意味がないことを意味します。ただしCronExpression
、それを無視して単にその値を破棄し、この式を次のように効果的に処理しているようです。
0 0 * * * ?
興味がある方のために説明すると、これは無効な値を破棄するコードです。0
if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
if (val != -1) {
set.add(Integer.valueOf(val));
} else {
set.add(NO_SPEC);
}
return;
}
詳細については、CronTrigger のドキュメントを参照してください。私の推測では、この式は1 時間に 1 回0 0/0 * * * ?
という意味です(つまり、1 分ごとを意味するわけではありません)。ただし、常に (つまり毎秒) 必要な場合は、 を使用できます。0/0
* * * * ? *