Quartz无法删除作业,现在是什么?

时间:2013-04-23 15:48:28

标签: java quartz-scheduler

给出Quartz作业和以下命令

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

假设deletedfalse的形式返回,正如我所理解的那样,这意味着从JVM的角度来看,工作仍然存在。

有了这两个问题:

  1. 是否可以强制删除作业?
  2. 什么事件阻止Quartz删除作业?
  3. 如果没有抛出异常,可以安全地假设找不到工作吗?什么会导致这个?这种情况发生的唯一方法不是首先删除作业吗?

    我正在使用

        <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);
        }
    

2 个答案:

答案 0 :(得分:7)

  1. 是的,你已经在做了。
  2. 作业目前正在运行。
  3. 如果您需要在作业运行时删除该作业,请确保您的作业实现了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()) );