首页 文章

Quartz调度程序缺少工作

提问于
浏览
1

我正在给石英调度程序添加一个工作 . 之后,我调用附加的调试打印作业功能 . 它没有列出工作 . 对 getCurrentlyExecutingJobs() 的函数调用可能仅限于返回最大值 . 10个工作?

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

1 回答

  • 1

    方法 getCurrentlyExecutingJobs() 将仅返回正在运行的作业,而不是每个预定作业 .
    要获得每个预定的工作,你应该这样做:

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

相关问题