做了一个quart测试
main:
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
JobDetail testJobDetail=JobBuilder
.newJob(TestJob.class)
.withIdentity("myTestJob", "myGroup")
.build();
CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
Trigger trigger=TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "myGroup")
.withSchedule(cronScheduleBuilder)
.build();
Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(testJobDetail, trigger);
scheduler.start();
System.err.println(scheduler.toString());
}
}
TestJob.class
public class TestJob extends BaseJob {
private Logger logger=Logger.getLogger(TestJob.class);
private DateFormat formate=new SimpleDateFormat("HH:mm:ss");
@Override
protected void invoke(Scheduler scheduler, Trigger trigger) {
logger.info("dateTime:==>"+formate.format(new Date()));
}
}
BaseJob.java
public abstract class BaseJob implements Job {
/* (non-Javadoc)
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
public final void execute(JobExecutionContext context)
throws JobExecutionException {
//context.get
invoke(context.getScheduler(),context.getTrigger());
refresh(context.getScheduler(),context.getTrigger());
}
private void refresh(Scheduler scheduler,Trigger trigger){
try {
CronTriggerImpl triggerImpl=(CronTriggerImpl)trigger;
triggerImpl.setCronExpression("0/8 * * * * ?");
scheduler.rescheduleJob(trigger.getKey(), triggerImpl);
} catch (Exception e) {
e.printStackTrace();
}
}
protected abstract void invoke(Scheduler scheduler,Trigger trigger);
}
刚开始,我是让他执行完,就重置trigger执行时间
我发现根本就不能重置trigger执行时间,反而变的更快了:
15:43:35,040 INFO TestJob:27 - dateTime:==>15:43:35
15:43:40,002 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,003 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,005 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,008 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,010 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,011 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,013 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,015 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,016 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,017 INFO TestJob:27 - dateTime:==>15:43:40
15:43:40,019 INFO TestJob:27 - dateTime:==>15:43:40
.
.
.
.
后来我这样做:把这个重置trigger时间的代码放在main方法里面可以实现:
public static void main(String[] args) throws SchedulerException, ParseException {
JobDetail testJobDetail=JobBuilder
.newJob(TestJob.class)
.withIdentity("myTestJob", "myGroup")
.build();
CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
Trigger trigger=TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "myGroup")
.withSchedule(cronScheduleBuilder)
.build();
Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(testJobDetail, trigger);
scheduler.start();
CronTriggerImpl triggerImpl=(CronTriggerImpl)trigger;
triggerImpl.setCronExpression("0/8 * * * * ?");
scheduler.rescheduleJob(trigger.getKey(), triggerImpl);
System.err.println(scheduler);
}
15:45:48,039 INFO TestJob:27 - dateTime:==>15:45:48
15:45:56,000 INFO TestJob:27 - dateTime:==>15:45:56
15:46:00,001 INFO TestJob:27 - dateTime:==>15:46:00
15:46:08,001 INFO TestJob:27 - dateTime:==>15:46:08
15:46:16,000 INFO TestJob:27 - dateTime:==>15:46:16
.
.
.
.
.如果我想执行一次重置一下执行时间,该怎么做?