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);