Java - Quartz CronSchedule不适用于开始日期和结束日期

问题描述:

当我将startDate和endDate设置为触发器时,ChronSchedule只对该作业调用execute方法一次。Java - Quartz CronSchedule不适用于开始日期和结束日期

JobDetail job = JobBuilder.newJob(service) 
        .withIdentity(batchService.getName(), CommonConstants.BATCH_JOB_GROUP).build(); 
      Trigger trigger = TriggerBuilder 
        .newTrigger() 
        .withIdentity(batchService.getName(), CommonConstants.BATCH_JOB_GROUP) 
        .startAt(startDate) 
        .endAt(endDate) 
        .withSchedule(
          CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) 
        .build(); 
      System.out.println("##########" + trigger.getEndTime()); 
      System.out.println("##########" + trigger.getStartTime()); 

正如你所看到的,我在触发器上放了一些打印以获取开始日期和结束日期。 这似乎是正确的:

##########Fri Oct 20 16:00:00 CEST 2017 
##########Fri Oct 20 15:00:00 CEST 2017 

在execute方法,我把打印:

public void execute(JobExecutionContext context) throws JobExecutionException 
    { 
     System.out.println("Executing job. The next: " + context.getNextFireTime()); 

    } 

但结果是unconfortable:

Executing job. The next: null 

什么有我错了?

我不知道CronsScheduler或CronsTrigger,但你可以尝试下面的代替CronScheduleBuilder。

import org.quartz。* Packages。

JobDetail jobDetail = JobBuilder.newJob(MYJOB.class).withIdentity(jobName).withDescription("TryThis").build(); 

CalendarIntervalTriggerImpl trigger = new CalendarIntervalTriggerImpl("triggername", startTime, endTime, 
           DateBuilder.IntervalUnit.valueOf("MINUTE"), frequency); 

// Try to keep scheduler object as singultant object. 
// OR it'll also work fine if you start scheduler it multiple times with diffrebt scheduler object for JDBCJob store. 

SchedulerFactory sf = new StdSchedulerFactory(); 

Scheduler scheduler = sf.getScheduler(); 
scheduler.start(); 

scheduler.scheduleJob(jobDetail, trigger);