关于Quartz的几个单独的问题
如果我想要执行一次事件,那么
就足够了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分钟..
好的..尝试更大的间隔
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
开始,那么它会发现有两个甚至几分钟的差异,并会在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();
}
答案 0 :(得分:2)
1行修复
calendarInstance.set(Calendar.MILLISECOND, 0);
完成。