クォーツに関するいくつかの個別の質問
イベントを1回実行したい場合は、
trigger.setRepeatCount(0);
このスニペットを検討します。予定時刻が「今より前」の場合にイベントが実行され、予定時刻が将来の場合は実行されません
JobDetail job = new JobDetail(); job.setName(eventType.toString() + " event"); job.setJobClass(Action.class); SimpleTrigger trigger = new SimpleTrigger(); trigger.setStartTime(new Date(momentInTime.inMillis())); trigger.setName("trigger"); trigger.setRepeatInterval(repeatFrequency.inMillis()); trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY); scheduleManager.getScheduler().scheduleJob(job, trigger);
上記のコードを使用して、私は次のことを観察します
Time now : 1352410780356
Will execute at : 1352410840356 // 1 min interval
Execution starts : 1352410840368
現在と実行がスケジュールされた時間の差は正確に1分です。
OK..もっと大きな間隔を試して
Time now : 1352411061156
Will execute at : 1352411301156 // 3 min interval
Execution starts : 1352411301165
繰り返しますが..違いは正確に3分です。
実行はすぐに行う必要があります
new MomentInTime(new DayOfMonth(8), new HourOfDay(15), new MinuteOfHour(48));
実際には、現在の時刻と要求された時刻の間のオフセット(その時点でのオフセットでさえ)として開始されます(開始するように見えます)。
で10:43:25
仕事を始めたい10:45:00
場合は、2分の差があることがわかり、で仕事をスケジュールするよう10:45:25
です。
これは何が原因ですか?
その間、
public MomentInTime(DayOfMonth day, HourOfDay hour, MinuteOfHour min) {
calendarInstance = Calendar.getInstance();
// Get current year and month
int year = calendarInstance.get(Calendar.YEAR);
int month = calendarInstance.get(Calendar.MONTH);
calendarInstance.set(year, month, day.getValue(), hour.getValue(), min.getValue());
System.out.println("Time now : " + System.currentTimeMillis());
System.out.println("Will execute at: " + calendarInstance.getTimeInMillis());
}
public long inMillis() {
return calendarInstance.getTimeInMillis();
}