не может запускать один и тот же класс с разным именем задания и группой, запускать одновременно

Работаю на кварцевом планировщике. Я создал класс (com.test.job.MyClass), который реализует Job MyClass, содержит некоторые динамические значения, которые передаются в DataMap при планировании. на основе значения карты данных мне нужно вызвать остальные API, передав это значение карты данных.

Итак, в моей БД я определил задание, имеющее имя класса, имя задания, имя группы и значение операции. Я определил несколько записей в БД, имеющих

Как JOB-1

jobClassName= com.test.job.MyClass
jobName=TEST1
groupName =group
operationValue =ADD

Как и JOB-2

jobClassName= com.test.job.MyClass
jobName=TEST2
groupName =group
operationValue =ADD

Я пытаюсь запланировать эти 2 задания с одинаковым выражением Cron. но выполняется только задание TEST1. Тест2 нет. даже jobName отличается

Scheduler scheduler = scheduleFactory.getScheduler();
        try {
            Class<? extends Job> jobClassName = (Class<? extends Job>) Class.forName(className);
            JobDetail jobDetails = JobBuilder.newJob(jobClassName).withIdentity(jobName, groupName).build();
            putIntoDataMap(job, jobDetails.getJobDataMap(), user);
            CronTrigger trigger = newTrigger().withIdentity(jobName, groupName)
                    .withSchedule(cronSchedule(cronExpression).inTimeZone("Asia/Kolkata")).build();

            scheduler.scheduleJob(jobDetails, trigger);
        } catch (SchedulerException | ClassNotFoundException ex) {
            throw new CredityRuntimeException(CredityErrorCodes.INVALID_TRIGGER.name(), ex);
        }

в реализованном классе я вижу операцию ADD, поэтому это означает, что был запущен только TEST1. Я ожидаю, что оба должны работать.

public class MyClass implements Job {

@Override
    public void execute(JobExecutionContext context) throws JobExecutionException 
    {
        .....
         String operationValue=jobDataMap.get("Operation");
    }
}

person Musaddique    schedule 30.05.2020    source источник


Ответы (1)


Очень странный. Вы можете использовать QuartzDesk (здесь я необъективен) или другой альтернативный графический интерфейс управления Quartz, чтобы:

(1) подключитесь к вашему экземпляру Quartz и проверьте зарегистрированные задания и триггеры. В вашем случае вы должны увидеть два задания TEST1 и TEST2.

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

Примечание. Бесплатной QuartzDesk Lite Edition должно быть вполне достаточно и поможет быстро определить проблему.

Одна вещь, о которой нужно знать, это флаг долговечности работы. Кратковременные задания Quartz автоматически отбрасываются Quartz, когда нет связанных триггеров, которые, как ожидается, вызовут задание в будущем. Вы не включили свои выражения cron для TEST1 и TEST2, поэтому вы можете вызвать storeDurably при создании сведений о вакансии на всякий случай...

person Jan Moravec    schedule 02.06.2020
comment
Я пытался, но не видел TEST 1 и TEST2 одновременно. если я планирую другое время, я могу видеть - person Musaddique; 07.06.2020
comment
Если вы можете поделиться своим приложением или его упрощенной версией, в которой проявляется проблема, я рассмотрю ее и выясню, что происходит. - person Jan Moravec; 09.06.2020