code: @Override
      public Date nextExecutionTime(TriggerContext triggerContext) {
          Date date = triggerContext.lastCompletionTime();
          if (date != null) {
              Date scheduled = triggerContext.lastScheduledExecutionTime();
              if (scheduled != null && date.before(scheduled)) {
                  // Previous task apparently executed too early...
                  // Let's simply use the last calculated execution time then,
                  // in order to prevent accidental re-fires in the same second.
                  date = scheduled;
              }
          } else {
              date = new Date();
          }
          return this.sequenceGenerator.next(date);
      }
docs: Determine the next execution time according to the given trigger context.
  <p>
  Next execution times are calculated based on the
  
  @param triggerContext
  the trigger context
  @return the date {@linkplain TriggerContext#lastCompletionTime completion
  time} of the previous execution; therefore, overlapping
  executions won't occur.