Кварц не может удалить работу, что теперь?

дано задание кварца и следующая команда

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

2 ответов


  1. Да, вы уже делаете это.
  2. задание выполняется в данный момент.

если вам нужно удалить задание во время его выполнения, убедитесь, что ваше задание реализует org.кварцевый.InterruptableJob. Тогда вы можете позвонить org.quartz.Scheduler.interrupt(JobKey) чтобы остановить его, пока он работает.

попробуйте добавить catch для общего исключения после SchedulerException (это лучше обработка исключений, и если вы не уверены в ошибках, которые вы можете получить, это поможет вам).

также имейте в виду, что при создании задания quartz вы можете использовать jobBuilder.storeDurably(false), что приведет к удалению задания quartz автоматически, когда с ним больше не будет связан активный триггер.


при планировании задания установите следующий

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

В выполнить задание action

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