当前位置: 首页 > 知识库问答 >
问题:

如何检查哪个Quartz计划程序作业未运行

庾勇军
2023-03-14

我有下面的代码,我用来检查哪个quartz调度程序作业正在运行。它还向我发送一封电子邮件,列出正在运行的调度程序作业。但我不知道它不会返回所有正在运行的调度程序作业。现在我只想知道那些有问题的调度程序作业,已经停止并且没有运行。我在我的生产环境中发现了一个关键问题,我发现一些调度程序作业没有运行,但我真的不知道它是哪个调度程序作业。

public String getPrintJobs() {
  StringBuilder sb = new StringBuilder();
  try {
   sb.append("Quartz Jobs\r\n\r\n");

   Scheduler scheduler = this.getJobScheduler();
         // 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> triggers = scheduler.getTriggersOfJob(jobKey);
     Date nextFireTime = null;
     int priority = 5;
              if (triggers.size() > 0)
              {
                  nextFireTime = triggers.get(0).getNextFireTime();
                  priority = triggers.get(0).getPriority();
              }

     sb.append("Name= "+ jobKey.getName() + " Group=" + jobKey.getGroup() + " NextFireTime=" + nextFireTime + " Priority=" + priority + " Paused=" + (isJobPaused(jobKey.getName())?"IS PAUSED":"NOT PAUSED") + " Triggers #=" + triggers.size() + "\r\n\r\n"); 
             }
         }

         sb.append("End Quartz Jobs\r\n\r\n");
  } catch (Exception e) {
   logger.debug("debugPrintJobs:" + e.getMessage());
  }

  return sb.toString();
 }

 private Boolean isJobPaused(String jobName) throws SchedulerException {
  Scheduler scheduler = this.getJobScheduler();
     JobKey jobKey = new JobKey(jobName);
     JobDetail jobDetail = scheduler.getJobDetail(jobKey);
     List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobDetail.getKey());
     for (Trigger trigger : triggers) {
         TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
         if (TriggerState.PAUSED.equals(triggerState)) {
             return true;
         }
     }
     return false;
 }

共有1个答案

季俭
2023-03-14

我没有用它来解决任何问题,但是下面的界面可以帮助你。

TriggerListener可以在Quartz无法启动作业时检查缺火。

JobListener可以检查已完成的作业,无论是成功还是失败案例。

http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-07.html

 类似资料:
  • 问题内容: 如何检查计划的Quartz Cron作业是否正在运行?是否有任何API可以进行检查? 问题答案: scheduler.getCurrentlyExecutingJobs()在大多数情况下应该可以工作。但是请记住不要在Job类中使用它,因为它使用ExecutingJobsManager(a JobListener)将正在运行的作业放到HashMap中,该HashMap在作业类之前运行,因

  • 如何检查计划的Quartz cron作业是否正在运行?是否有API进行检查?

  • Spring使用Quartz的顺序作业计划 我有三个或更多的工作,这取决于他们各自以前的工作,他们将按顺序运行。如果完成运行,当完成运行。如果在上一个中发生任何错误,则不会激发下一个触发的作业。我试图了解工作链使用石英,但无法通过它。 作业顺序如下所示 提前谢了。

  • 问题内容: 我正在使用Quartz Job执行特定任务。 我也在我的Main应用程序类中安排它的执行,而我试图完成的工作是不允许同时执行此作业的实例。 因此,调度程序仅应在其先前实例完成后才执行作业。 这是我的工作班级: 因此,在应用程序的主类中,我正在启动调度程序: 如果另一个实例仍在运行,我想阻止调度程序启动第二个MainJob实例… 问题答案: 只需在Job类顶部使用Annotation。

  • 我已经创建了一个Python包并在PyPI上发布了它,比如说< code>spamandeggs。这个软件包是跨平台的(Windows、GNU/Linux、MacOSX ),目的是定期(比如每5分钟)向用户更新某些信息。可以从命令行通过命令< code>spamtheeggs运行该包。 以下是我面临的问题: 问题01:如何对通过< code>spamtheeggs命令运行的脚本进行daemoniz

  • 问题内容: 是否可以从工作流脚本中检查某项作业是否正在运行或已计划? 尽管使用阶段管理并发似乎足够: 并在以下阶段运行构建: 可能是有人手动开始工作 测试工作 ,而我只想在我的工作流程脚本中处理这种情况。例如,跳过构建或等待构建完成。 问题答案: 这适用于不使用 Groovy Sandbox的流 :