2013-04-23 14 views
6

Biorąc pod uwagę pracę kwarc i następującą komendęKwarc nie może usunąć pracy, co teraz?

boolean deleted = scheduler.deleteJob(event.getName(), "some group name") 

Zakładając deleted wraca jako false, jak rozumiem, oznacza to, że z punktu stoisku JVM, zadanie jest nadal.

Z tym 2 pytania:

  1. Czy to możliwe, aby wymusić usunięcie pracę?
  2. Jakie wydarzenie uniemożliwia Kwarkowi usunięcie pracy?

Jeśli wyjątek nie zostanie rzucony, czy można bezpiecznie założyć, że nie znaleziono pracy? Co by to spowodowało? Czy nie jest to jedyny sposób na to, aby praca została usunięta na pierwszym miejscu?

Używam

<dependency> 
     <groupId>org.quartz-scheduler</groupId> 
     <artifactId>quartz</artifactId> 
     <version>1.8.0</version> 
    </dependency> 

Czy ten strajk wy jak prawidłowy sposób obsłużyć rzeczy? Czy moje rozumowanie jest poprawne?

boolean deleted; 
    try { 
     deleted = scheduler.deleteJob(event.getName(), "some group name"); 
     if (!deleted) { 
      logger.warn("Quartz failed to delete the job!" + event.getName() + ". Job not found"); 
     } 
    } catch (SchedulerException e) { 
     logger.error("There is an internal Scheduler error", e); 
    } 
+0

jeden powód, dlaczego nie był w stanie usunąć zadanie zostało Dawałem błędną wartość grupy stanowisk. – Mateen

Odpowiedz

6
  1. Tak, jesteś już robi.
  2. Zadanie jest aktualnie uruchomione.

Jeśli musisz usunąć pracę, gdy jest ona uruchomiona, upewnij się, że Twoje zadanie implementuje org.quartz.InterruptableJob. Następnie możesz wywołać org.quartz.Scheduler.interrupt (JobKey), aby zatrzymać go, gdy jest uruchomiony.

Spróbuj dodać haczyk do ogólnego wyjątku po swoim wyjątku SchedulerException (jest to lepsze działanie w przypadku wyjątków i jeśli nie masz pewności co do błędów, które możesz uzyskać, to ci pomoże).

Należy również pamiętać, że podczas tworzenia kwarcowego zadania można użyć jobBuilder.storeDurably (false), co spowoduje automatyczne usunięcie kwarcu, gdy nie ma już aktywnego wyzwalacza z nim związanego.

0

podczas planowania pracy ustawić poniżej jednej

job.getJobDataMap().put("JOB_NUMBER",input); 
      job.getJobDataMap().put("TRIGGER_NAME",input); 

In wykonania akcji przydzielonego stanowiska

TriggerKey triggerKey = new TriggerKey(jobCtx.getMergedJobDataMap().get("TRIGGER_NAME").toString(),jobCtx.getMergedJobDataMap().get("TRIGGER_NAME").toString()); 
//condition 
scheduler.unscheduleJob(triggerKey); 
scheduler.deleteJob(JobKey.jobKey(jobCtx.getMergedJobDataMap().get("JOB_NUMBER").toString(),jobCtx.getMergedJobDataMap().get("JOB_NUMBER").toString())); 
Powiązane problemy