Adder
Adder

Reputation: 5868

Quartz scheduler missing job

I am adding a job to quartz scheduler. After that I call the attached debug print jobs function. It does not list the job. Is the function call to getCurrentlyExecutingJobs() maybe limited to return max. of 10 jobs?

public void scheduleManagementEmail(ManagementEmailConfig managementEmailConfig, Scheduler scheduler) throws SchedulerException
{
    logger.debug("Scheduling Management Email " + 
    managementEmailConfig.getManagementEmailConfigId());

    String jobKey = "SendManagementEmailJob_" +     
    managementEmailConfig.getManagementEmailConfigId();
    Class<? extends Job> jobClass = SendManagementEmailJob.class;
    JobDetail job = JobBuilder.newJob(jobClass).withIdentity(new JobKey(jobKey)).build();
    Trigger trigger = sendManagementEmailJob.getTriggerWithSchedule(managementEmailConfig);
    trigger.getJobDataMap().put("managementEmailConfigId", managementEmailConfig.getManagementEmailConfigId());
    if (!scheduler.checkExists(new JobKey(jobKey)))
    {
        scheduler.scheduleJob(job, trigger);
    }
    debugPrintJobs();
}

public void debugPrintJobs() {
    try {
        logger.debug("Quartz Jobs");
        Scheduler s_scheduler = this.getJobScheduler();
        List<JobExecutionContext> currentJobs = s_scheduler.getCurrentlyExecutingJobs();
    for (JobExecutionContext jobCtx : currentJobs) {
        JobKey jobKey = jobCtx.getJobDetail().getKey();             
        JobDetail jobDetail = s_scheduler.getJobDetail(jobKey);
        List<? extends Trigger> triggers = s_scheduler.getTriggersOfJob(jobKey);

        Date nextFireTime = null;
        if (triggers.size() > 0)
        {
            nextFireTime = triggers.get(0).getNextFireTime();
        }
        logger.debug("Name= "+ jobKey.getName() + " Group=" + jobKey.getGroup() + " NextFireTime=" + nextFireTime); 
    }
} catch (Exception e) {
    logger.debug("debugPrintJobs:" + e.getMessage());
}

Upvotes: 1

Views: 1813

Answers (1)

walen
walen

Reputation: 7273

The method getCurrentlyExecutingJobs() will return only the jobs that are running, not every scheduled job.
To get every scheduled job, you should do something like this:

    Scheduler scheduler = getScheduler();
    try {
        // All scheduled jobs
        for (String groupName : scheduler.getJobGroupNames()) {
            for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                JobDetail jobDetail = scheduler.getJobDetail(jobKey);
                final List<? extends Trigger> triggersOfJob = scheduler.getTriggersOfJob(jobKey);
                // Do something with the info you just got
                // ...
            }
        }
    } catch (SchedulerException e) {
        log.error("Retrieving jobs", e);
    }

Upvotes: 1

Related Questions