2013-04-23 80 views
6

給定一個石英工作,下面的命令石英無法刪除作業,現在是什麼?

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

假設deleted回來爲false,按照我的理解,這意味着從JVM的立場來看,這項工作仍然存在。

有了這個2個問題:

  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 2017-10-18 13:11:22

回答

6
  1. 是的,你已經在做了。
  2. 該作業當前正在運行。

如果您需要在作業運行時刪除作業,請確保您的作業執行org.quartz.InterruptableJob。然後你可以調用org.quartz.Scheduler.interrupt(JobKey)在運行時停止它。

嘗試添加一個捕獲一般異常後,你的SchedulerException(這是更好的異常處理,如果你不知道你可能會得到它的錯誤將幫助你)。另外請記住,當您構建石英作業時,可以使用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()));