2013-04-23 5 views
6

내가 그것을 이해, 그것은 JVM의 스탠드 지점에서, 작업이 여전히 있다는 것을 의미, 다시 false로 오는 석영 작업 및 deleted을 가정하고 다음 명령Quartz가 작업을 삭제하지 못했습니다. 이제 무엇을할까요?

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

을 감안할 때. 이 두 질문

:

  1. 는이 작업을 삭제 강제 할 수 있습니까?
  2. Quartz가 작업을 삭제하는 것을 방지하는 이벤트는 무엇입니까?

예외가 발생하지 않으면 작업을 찾을 수 없다고 생각하는 것이 안전합니까? 이게 뭐야? 이 일이 일어날 수있는 유일한 방법은 작업을 처음부터 삭제하는 것이 아닙니까?

내가

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

를 사용하고 있습니까 일을 처리 할 수있는 올바른 방법으로이 파업 당신은? 내 논리가 맞습니까?

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

이유 중 하나를 수행 설정할 수있다. – Mateen

답변

6
  1. 예, 당신은 이미 그 일을하고 있습니다.
  2. 작업이 현재 실행 중입니다.

실행중인 작업을 삭제해야하는 경우 작업이 org.quartz.InterruptableJob을 구현하는지 확인하십시오. 그런 다음 org.quartz.Scheduler.interrupt (JobKey)를 호출하여 실행 중에 중지 할 수 있습니다.

SchedulerException 이후에 일반 Exception에 대한 catch를 추가하는 것이 좋습니다 (예외 처리가 더 좋으며 오류에 대해 잘 모르는 경우 도움이 될 수 있음).

또한 석영 작업을 빌드 할 때 jobBuilder.storeDurably (false)를 사용할 수 있습니다. 그러면 더 이상 활성 트리거가 연결되어 있지 않을 때 쿼츠 작업이 자동으로 삭제됩니다.

0

작업을 예약하는 내가 잘못된 작업 그룹 값을 제공 하였다 작업을 삭제할 수없는 이유를 하나

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

에서 아래 작업 동작을

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())); 
관련 문제