code: @Override protected JobSpecSchedule doScheduleJob(JobSpec jobSpec, Runnable jobRunnable) {
  
      // Build a data map that gets passed to the job
      JobDataMap jobDataMap = new JobDataMap();
      jobDataMap.put(JOB_SPEC_KEY, jobSpec);
      jobDataMap.put(JOB_RUNNABLE_KEY, jobRunnable);
  
      // Build a Quartz job
      JobDetail job = JobBuilder.newJob(QuartzJob.class)
          .withIdentity(jobSpec.getUri().toString())
          .withDescription(Strings.nullToEmpty(jobSpec.getDescription()))
          .usingJobData(jobDataMap)
          .build();
  
      Trigger jobTrigger = createTrigger(job.getKey(), jobSpec);
      QuartzJobSchedule jobSchedule = new QuartzJobSchedule(jobSpec, jobRunnable, jobTrigger);
      try {
        _scheduler.getScheduler().scheduleJob(job, jobTrigger);
        getLog().info(String.format("Scheduled job %s next two fire times: %s , %s.", jobSpec, jobTrigger.getNextFireTime(),
            jobTrigger.getFireTimeAfter(jobTrigger.getNextFireTime())));
      } catch (SchedulerException e) {
        throw new RuntimeException("Scheduling failed for " + jobSpec + ":" + e, e);
      }
  
      return jobSchedule;
    }
docs: {@inheritDoc}