Кварц добавить триггер для уже существующей работы - PullRequest
0 голосов
/ 09 апреля 2019

Я использую Quartz Framework для добавления и планирования заданий и триггеров.Требуется динамическое добавление триггеров для уже существующего задания в базе данных.Хотя я пытаюсь достичь этого с помощью приведенного ниже кода, я получаю org.quartz.ObjectAlreadyExistsException: Невозможно сохранить задание: 'EBP1.AAA', поскольку оно уже существует с этим идентификатором.Работа AAA с JobGroup EBP1 уже занесена в базу данных.Я просто хочу добавить новый триггер для той же работы.Пожалуйста, помогите, как этого добиться.

String jobName = "AAA";
jobTrigger = jobName + "Trigger"+ (int )(Math.random() * 50 + 1);
String jobGroup = "EBP1";

JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(jobTrigger, jobGroup).storeDurably()
                    .build();
            if (scheduler.checkExists(JobKey.jobKey(jobName, jobGroup))) {
                System.out.println("Job exist");
            } else {
                System.out.println("New job");
                scheduler.addJob(jobDetail, true);
            }

            CronTrigger trigger1 = (CronTrigger)(newTrigger().withIdentity(jobTrigger, jobGroup).withDescription("default description").forJob(jobDetail)
                    .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).startAt(futureDate(500, IntervalUnit.MILLISECOND)).build());

            scheduler.scheduleJob(jobDetail, trigger1);

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Быстрый вопрос: пример кода точно такой же, из которого вы получаете исключение?
Или, возможно, пример кода не завершен, и вам нужно его обновить.

В любом случае, я думаю в текущем примере кода есть ошибка :
- вы создаете "jobDetail" с идентификатором триггера, а не "jobName" - withIdentity(jobTrigger, jobGroup)

Чтобы добавить новый триггер в существующее задание, сделайте что-то вроде этого:

JobKey myJobKey = new JobKey(jobName, jobGroup);

CronTrigger trigger1 = (CronTrigger)(newTrigger().withIdentity(jobTrigger, jobGroup)
    .withDescription("default description").forJob(myJobKey)
    .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
    .startAt(futureDate(500, IntervalUnit.MILLISECOND))
    .build());

scheduler.scheduleJob(trigger1);

JavaDoc для двухпараметрического метода scheduler.scheduleJob(JobDetail, Trigger) ясно говорит,
, что он попытается СОЗДАТЬ задание на основе предоставленного JobDetail
- поэтому имеет смысл, почему вы получаете ObjectAlreadyExistsException

0 голосов
/ 11 апреля 2019

вы можете заменить

            scheduler.scheduleJob(jobDetail, trigger1);

с приведенным ниже и попробуйте снова

            scheduler.scheduleJob(trigger1);
...