private static TriggerContext getTriggerContext(Date lastCompletionTime) { SimpleTriggerContext context = new SimpleTriggerContext(); context.update(null, null, lastCompletionTime); return context; }
private Flux<Message<?>> createFluxGenerator() { SimpleTriggerContext triggerContext = new SimpleTriggerContext(); Date date = this.trigger.nextExecutionTime(triggerContext); if (date != null) { triggerContext.update(date, null, null); long millis = date.getTime() - System.currentTimeMillis(); sink.next(Duration.ofMillis(millis)); Mono.delay(duration) .doOnNext(l -> triggerContext.update(triggerContext.lastScheduledExecutionTime(), new Date(), null)) .flatMapMany(l -> .subscribeOn(Schedulers.fromExecutor(this.taskExecutor)) .doOnComplete(() -> triggerContext.update(triggerContext.lastScheduledExecutionTime(), triggerContext.lastActualExecutionTime(), new Date()) )), 1)
@Override public void timerExpired(Timer timer) { Date actualExecutionTime = new Date(); super.timerExpired(timer); Date completionTime = new Date(); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!this.cancelled) { schedule(); } } }
@Override @Nullable public Date getNextRunTime(@Nullable LastExecution le, Date taskScheduledTime) { return (trigger.nextExecutionTime(le != null ? new SimpleTriggerContext(le.getScheduledStart(), le.getRunStart(), le.getRunEnd()) : new SimpleTriggerContext())); } @Override
private Flux<Message<?>> createFluxGenerator() { SimpleTriggerContext triggerContext = new SimpleTriggerContext(); Date date = this.trigger.nextExecutionTime(triggerContext); if (date != null) { triggerContext.update(date, null, null); long millis = date.getTime() - System.currentTimeMillis(); sink.next(Duration.ofMillis(millis)); Mono.delay(duration) .doOnNext(l -> triggerContext.update(triggerContext.lastScheduledExecutionTime(), new Date(), null)) .flatMapMany(l -> .subscribeOn(Schedulers.fromExecutor(this.taskExecutor)) .doOnComplete(() -> triggerContext.update(triggerContext.lastScheduledExecutionTime(), triggerContext.lastActualExecutionTime(), new Date()) )), 1)
@Override public void run() { Date actualExecutionTime = new Date(); super.run(); Date completionTime = new Date(); synchronized (this.triggerContextMonitor) { Assert.state(this.scheduledExecutionTime != null, "No scheduled execution"); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!obtainCurrentFuture().isCancelled()) { schedule(); } } }
@Override @Nullable public Date getNextRunTime(@Nullable LastExecution le, Date taskScheduledTime) { return (trigger.nextExecutionTime(le != null ? new SimpleTriggerContext(le.getScheduledStart(), le.getRunStart(), le.getRunEnd()) : new SimpleTriggerContext())); } @Override
@Test public void testIncrementSecondWithPreviousExecutionTooEarly() throws Exception { CronTrigger trigger = new CronTrigger("11 * * * * *", timeZone); calendar.set(Calendar.SECOND, 11); SimpleTriggerContext context = new SimpleTriggerContext(); context.update(calendar.getTime(), new Date(calendar.getTimeInMillis() - 100), new Date(calendar.getTimeInMillis() - 90)); calendar.add(Calendar.MINUTE, 1); assertEquals(calendar.getTime(), trigger.nextExecutionTime(context)); }
@Override public void run() { Date actualExecutionTime = new Date(); super.run(); Date completionTime = new Date(); synchronized (this.triggerContextMonitor) { Assert.state(this.scheduledExecutionTime != null, "No scheduled execution"); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!obtainCurrentFuture().isCancelled()) { schedule(); } } }
cal.add(Calendar.MINUTE, 30); // 4:30 Date lastCompletionTime = cal.getTime(); TriggerContext triggerContext = new SimpleTriggerContext( lastScheduledExecutionTime, lastActualExecutionTime, lastCompletionTime); cal.add(Calendar.MINUTE, 30);
CronTrigger trigger = new CronTrigger(); trigger.setCronExpression("0 0 23 3,18 * ? *"); SimpleTriggerContext triggerContext = new SimpleTriggerContext(); triggerContext.update(null, null, new Date()); Date nextFireAt = trigger.nextExecutionTime(triggerContext);
@Override public void timerExpired(Timer timer) { Date actualExecutionTime = new Date(); super.timerExpired(timer); Date completionTime = new Date(); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!this.cancelled) { schedule(); } } }
@Override @Nullable public Date getNextRunTime(@Nullable LastExecution le, Date taskScheduledTime) { return (trigger.nextExecutionTime(le != null ? new SimpleTriggerContext(le.getScheduledStart(), le.getRunStart(), le.getRunEnd()) : new SimpleTriggerContext())); } @Override
@Override public void run() { Date actualExecutionTime = new Date(); super.run(); Date completionTime = new Date(); synchronized (this.triggerContextMonitor) { Assert.state(this.scheduledExecutionTime != null, "No scheduled execution"); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!obtainCurrentFuture().isCancelled()) { schedule(); } } }
/** * Only set next execution time if the job is not continuous. */ public void setNextExecutionTime( Date nextExecutionTime ) { if ( cronExpression == null || cronExpression.equals( "" ) || cronExpression.equals( "* * * * * ?" ) ) { return; } if ( nextExecutionTime != null ) { this.nextExecutionTime = nextExecutionTime; } else { this.nextExecutionTime = new CronTrigger( cronExpression ).nextExecutionTime( new SimpleTriggerContext() ); } }
@Override public void timerExpired(Timer timer) { Date actualExecutionTime = new Date(); super.timerExpired(timer); Date completionTime = new Date(); this.triggerContext.update(this.scheduledExecutionTime, actualExecutionTime, completionTime); if (!this.cancelled) { schedule(); } } }