1。
StdScheduler scheduler = (StdScheduler)context.getScheduler();
CronTrigger oldCronTrigger = (CronTrigger)context.getTrigger();
Date nextStartTime = getNextStartTime(oldCronTrigger.getStartTime());
CronTrigger cronTrigger = new CronTrigger(GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, GECJobStarter.AUTOMATE_LOAD_PENDINGFILE_TIME_Experssion);
cronTrigger.setNextFireTime(nextStartTime);
cronTrigger.setStartTime(nextStartTime);
log.info("LoadPendingFileJobDetail is "+context.getJobDetail());
log.info("LoadPendingFileTrigger is "+cronTrigger);
log.info("LoadPendingFileTrigger start time is "+cronTrigger.getStartTime());
log.info("LoadPendingFileTrigger next fire time is "+cronTrigger.getNextFireTime());
//scheduler.deleteJob(Constants.AUTOMATE_LOAD_PENDINGFILE, Constants.AUTOMATE_LOAD_PENDINGFILE);
scheduler.rescheduleJob(GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, GECJobStarter.AUTOMATE_LOAD_PENDINGFILE, cronTrigger);
上面的代码log 出来的时间与qtz_triggers里的时间不一致,比如log中nextStartTime = Fri Dec 25 14:28:07 CST 2009 ,而数据库中却是30分,差了两分钟
希望能够让JOB下一次触发能在第二天的某个时间发生,若 cronTrigger.setStartTime不写的话在reschedule 后还是在原先的下一次触发后就发生了。
对于一个quartz job""0 0/5 * * * ?" start time 设为14:23
public Date getNextStartTime(Date previousStartTime) {
log.info("previousStartTime is "+previousStartTime);
Calendar currentDate = Calendar.getInstance();
Calendar previousStartDate = Calendar.getInstance();
previousStartDate.setTime(previousStartTime);
currentDate.set(Calendar.HOUR_OF_DAY,previousStartDate.get(Calendar.HOUR_OF_DAY));
currentDate.set(Calendar.MINUTE,previousStartDate.get(Calendar.MINUTE));
currentDate.set(Calendar.SECOND,00);
currentDate.set(Calendar.MILLISECOND, 00);
currentDate.add(Calendar.MINUTE, 8);
Date nextStartTime = currentDate.getTime();
log.info("next start time is "+nextStartTime);
return nextStartTime;
:35
数据库的firetime 是14:31 但实际触发时间却是14:35