给出Quartz作业和以下命令
boolean deleted = scheduler.deleteJob(event.getName(), "some group name")
假设deleted
以false
的形式返回,正如我所理解的那样,这意味着从JVM的角度来看,工作仍然存在。
有了这两个问题:
如果没有抛出异常,可以安全地假设找不到工作吗?什么会导致这个?这种情况发生的唯一方法不是首先删除作业吗?
我正在使用
<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 :(得分:7)
如果您需要在作业运行时删除该作业,请确保您的作业实现了org.quartz.InterruptableJob。然后你可以打电话给org.quartz.Scheduler.interrupt(JobKey)
以在它运行时停止它。
在SchedulerException之后尝试为一般Exception添加一个catch(它是更好的异常处理,如果你不确定它可能会得到的错误,它会帮助你)。
另外请记住,在构建石英作业时,可以使用jobBuilder.storeDurably(false)
,这将导致在不再有与之关联的活动触发器时自动删除石英作业。
答案 1 :(得分: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()) );