5

クォーツに関するいくつかの個別の質問

  1. イベントを1回実行したい場合は、

    trigger.setRepeatCount(0);
    
  2. このスニペットを検討します。予定時刻が「今より前」の場合にイベントが実行され、予定時刻が将来の場合は実行されません

    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();
}
4

1 に答える 1

2

1行の修正

    calendarInstance.set(Calendar.MILLISECOND, 0);

終わり。

于 2012-11-12T22:27:17.957 に答える