Триггер срабатывает только один раз для повторяющихся выражений cron

Когда я пытаюсь запланировать два разных задания с одним и тем же выражением cron (0 * * * * ?), которое выполняется каждую минуту, срабатывает только один триггер. Я почти все перепробовал, но ничего не получилось. Я также передал параметр spring.quartz.properties.org.quartz.scheduler.batchTriggerAcquisitionMaxCount=10, но это не сработало. По крайней мере, один триггер срабатывает в минуту, а иногда и два, но никогда два триггера не срабатывают в минуту непрерывно. Я делаю что-то не так?

редактировать: я проверил в БД, что Next_Fire_Time обновляется, но не запускается, даже не происходит осечка или накладывается вето, как я вижу из моего прослушивателя триггеров.

public class GlobalTriggerListener implements TriggerListener {

    private static final String TRIGGER_LISTENER_NAME = "GlobalTriggerListener";

    @Override
    public String getName() {
        return TRIGGER_LISTENER_NAME;
    }

    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        String triggerName = context.getJobDetail().getKey().toString();
        System.out.println("triggerFired");
        System.out.println("trigger : " + triggerName + " is fired");
    }

    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
        boolean veto = false;
        System.out.println("Veto Job Excecution trigger: " + veto);
        return veto;
    }

    @Override
    public void triggerMisfired(Trigger trigger) {
        System.out.println(getName() + " trigger: " + trigger.getKey() + " misfired at " + trigger.getStartTime());
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        System.out.println(getName() + " trigger: " + trigger.getKey() + " completed at " + trigger.getStartTime());
    }
}





  private JobDetail buildJobDetail(ScheduledProcess sProcess) {
        JobDataMap jobDataMap = new JobDataMap();

        jobDataMap.put(JOB_DATA_KEY, sProcess.getSpid());

        return JobBuilder.newJob(ProcessStarterJob.class)
                .withIdentity(UUID.randomUUID().toString(), "scheduled-processes")
                .withDescription("Start Process Job")
                .usingJobData(jobDataMap)
                .storeDurably()
                .build();
    }

    private Trigger buildJobTrigger(JobDetail jobDetail, ScheduledProcess sProcess) throws ParseException {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = formatter.parse(sProcess.getStartDate());
        Date endDate = formatter.parse(sProcess.getEndDate());

        return TriggerBuilder.newTrigger()
                .withIdentity(jobDetail.getKey().getName(), "scheduled-processes-triggers")
                .withDescription("Start Process Trigger")
                .startAt(startDate)
                .endAt(endDate)
                .withSchedule(CronScheduleBuilder.cronSchedule(sProcess.getQuartzDef()).withMisfireHandlingInstructionDoNothing())
                .build();
    }
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
123
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Забавно, но верно. Я думаю, что это третий раз, когда я жертва Eclipse. Хотя я не мог видеть ни одного экземпляра, работающего в eclipse, всегда был устаревший запущенный экземпляр моего кварцевого приложения, которое я случайно увидел в диспетчере задач. Однако я даже отлаживал исходный код кварца :)

Так что, если вы столкнулись с той же проблемой, что и я, прежде всего убедитесь, что нигде не запущено никакого другого экземпляра вашего приложения, это также может быть другое приложение кварца, которое может использовать ваш кварц db. Когда я начинаю подозревать, есть ли какой-либо другой запущенный экземпляр, это был момент, когда я увидел, что триггер NEXT_FIRE_TIME обновляется, как и должно быть, но я не видел никакого срабатывания на моем прослушивателе триггеров.

Надеюсь, это поможет вам определить ваши проблемы.

Другие вопросы по теме