Wie überprüft man, ob der geplante Quartz Cron-Job läuft oder nicht? Gibt es eine API für die Überprüfung?Wie überprüft man, ob der Quartz Cron Job läuft?
Antwort
scheduler.getCurrentlyExecutingJobs() sollte in den meisten Fällen funktionieren. Aber denken Sie daran, es nicht in der Job-Klasse zu verwenden, denn es verwendet den ExecutingJobsManager (einen JobListener), um den laufenden Job in eine HashMap zu stellen, die vor der Jobklasse ausgeführt wird. Ein einfacher Ansatz besteht darin, zu überprüfen, ob die Feuerzeiten unterschiedlich sind:
public static boolean isJobRunning(JobExecutionContext ctx, String jobName, String groupName)
throws SchedulerException {
List<JobExecutionContext> currentJobs = ctx.getScheduler().getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx : currentJobs) {
String thisJobName = jobCtx.getJobDetail().getKey().getName();
String thisGroupName = jobCtx.getJobDetail().getKey().getGroup();
if (jobName.equalsIgnoreCase(thisJobName) && groupName.equalsIgnoreCase(thisGroupName)
&& !jobCtx.getFireTime().equals(ctx.getFireTime())) {
return true;
}
}
return false;
}
Beachten Sie auch, dass diese Methode nicht Cluster-bewusst ist. Das heißt, es werden nur Jobs zurückgegeben, die gerade in dieser Scheduler-Instanz ausgeführt werden, nicht über den gesamten Cluster. Wenn Sie Quartz in einem Cluster ausführen, funktioniert es nicht ordnungsgemäß.
Haben Sie sich diese answer angesehen? Versuchen Sie, mit:
Ich möchte nicht alle laufenden Jobs auflisten. Ich werde {jobid, jobgroup} zur Verfügung stellen. also hängt von meiner Eingabe ich sollte das Ergebnis bekommen. – kusumat
Diese Methode gibt eine Liste von JobExecutionContext zurück. Sie können über diese Liste iterieren und nur die Elemente auswählen, die der von Ihnen angegebenen ID und Gruppe entsprechen. Um die Gruppe zu erhalten, können Sie Folgendes tun: 'String group = context.getJobDetail(). GetGroup();' – rafaborrego
wie vorgeschlagen, können Sie das Ergebnis aus dem Scheduler einfach durch den Methodenaufruf überprüfen und suchen nach Jobkey oder Jobdetail – Acewin
Wenn Sie in der Tabelle QUARTZ_TRIGGERS feststellen, gibt es eine Spalte TRIGGER_STATE. Dies zeigt Ihnen den Status des Triggers (TriggerState) für einen bestimmten Job an. Aller Wahrscheinlichkeit nach hat Ihre App keine direkte Schnittstelle zu dieser Tabelle, aber der Quartz-Scheduler tut dies und Sie können den Status auf diese Weise überprüfen:
gibt es keine Möglichkeit, es in einem Quartz-Cluster zu tun? –