Почему моя кварцевая работа не запускается в соответствии с заданным выражением cron, а запускается каждые 10 минут?

Я пытаюсь создать задание, которое будет запускаться каждую субботу в 8 часов вечера, используя ввод выражения cron для планировщика триггеров. Но моя работа выполняется каждые 10 минут? Что я здесь не так сделал, пожалуйста, помогите. Мой стек установки приложения — Spring Boot + Hibernate. Код выглядит следующим образом.

    @Bean(name = "emailReportJobDetail")
    public JobDetail emailReportJobDetail() {
        return newJob().ofType(EmailReportJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_EmailReportProcessor")).withDescription("Invoke EmailReportProcessor Job service...").build();
    }

    @Bean
    public Trigger emailReportTrigger(@Qualifier("emailReportJobDetail") JobDetail job) {

        logger.info("Configuring emailReportTrigger to fire every Saturday 8 PM GMT");

        return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor")).withDescription("EmailReportProcessor trigger")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * SAT")
                )
                .build();
    }

person Abdullah    schedule 28.11.2019    source источник
comment
@ user85421 та же проблема сохраняется. похоже, возможно, проблема в сбросе старой информации о триггере.   -  person Abdullah    schedule 28.11.2019
comment
Плохо, с кодом все в порядке. У меня был еще один триггер в БД с похожим названием. Это стреляло каждые десять минут.   -  person Abdullah    schedule 28.11.2019


Ответы (4)


большую часть времени у вас есть задание с тем же именем в базе данных, которое должно быть обновлено другим членом кластера.

Либо вы можете попытаться переименовать свою работу (jobkey), либо проверить, не используется ли база данных кем-то еще.

Тем не менее, задание обновляет свою конфигурацию при запуске.

person Eric    schedule 29.11.2019

Попробуйте установить выражение cron 0 0 20 ? * 7, а также добавить часовой пояс.

return  newTrigger()
        .forJob(job)
        .withIdentity(TriggerKey.triggerKey("Qrtz_EmailReportProcessor"))
        .inTimeZone(TimeZone.getTimeZone(YOUR_TIME_ZONE))
        .withDescription("EmailReportProcessor trigger")
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0 20 ? * 7"))
        .build();

Хотя выражение cron 0 0 20 ? * SAT также верно, попробуйте это, а также ведите журнал в классе EmailReportJob.

person Apoorva    schedule 29.11.2019

Формат Crontab:

# 1. Entry: Minute when the process will be started [0-60]
# 2. Entry: Hour when the process will be started [0-23]
# 3. Entry: Day of the month when the process will be started [1-28/29/30/31]
# 4. Entry: Month of the year when the process will be started [1-12]
# 5. Entry: Weekday when the process will be started [0-6] [0 is Sunday] or 
            use sun, mon, tue, wed, thu, fri, or sat
#
# all x min = */x

Так что согласно этому 0 20 * * sat будет работать в 20:00 каждую субботу.

Полезным инструментом является: CronTab Guru, где вы можете ввести свое выражение, и оно выведет результат.

person Oozeerally    schedule 28.11.2019
comment
Нет @AdilOoze, формат кварцевого планировщика отличается - кварц-scheduler.org/documentation/quartz-2.3.0/tutorials/ - person Abdullah; 28.11.2019
comment
О, спасибо, что поправили меня, я не знал об этом. - person Oozeerally; 28.11.2019

У меня такая же проблема по другой причине, поэтому я публикую это. Я настроил схему QUARTZ с помощью настраиваемых таблиц. Например, JOB_DETAILS, TRIGGERS и CRON_TRIGGERS — это настоящие таблицы. Я создал таблицы с префиксом QRTZ_ для каждой таблицы.

При запуске приложения регистрируются задания и регистрируются триггеры, а записи присутствуют в таблицах, как и ожидалось. Но запуск задания не происходит в следующем временном интервале CRON. Итак, в чем ошибка, которую я сделал?

Существует связь между JOB_DETAILS и TRIGGERS, а TRIGGERS имеет связь с CRON_TRIGGERS и т. д. Я не указал связь FOREIGN KEY между этими таблицами.

person Nallamachu    schedule 18.11.2020