Кварцевый триггер не срабатывает сразу - PullRequest
1 голос
/ 15 мая 2019

Я бы хотел немедленно выполнить задание с помощью кварцевого планировщика, используя хранилище данных jdbc.Однако у меня есть задержка в 20-30 секунд между планированием и срабатыванием триггера, даже если я планирую с now () или вызовом triggerJob.

Я пытался выполнить задание с помощью простого триггера:

JobKey key = //...
        JobDetail jobDetail = newJob(jobBean.getClass())
                .withIdentity(key)
                .usingJobData(new JobDataMap(jobParams))
                .storeDurably()
                .build();

        Trigger trigger = newTrigger()
                .withIdentity(key.getName(), key.getGroup())
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withMisfireHandlingInstructionFireNow()
                        .withRepeatCount(0))
                .build();

        scheduler.scheduleJob(jobDetail, trigger);

И я также попытался запустить с планировщиком:

 JobKey key = // ...
        JobDetail jobDetail = newJob(jobBean.getClass())
                .withIdentity(key)
                .storeDurably()
                .build();
        scheduler.addJob(jobDetail, true);


        scheduler.triggerJob(key, new JobDataMap(jobParams));

Вот журналы слушателя, которые показывают задержку.

2019-05-15 13:59:52,066Z  INFO  [nio-8081-exec-2] c.m.f.s.logger.SchedulingListener                  : Job added: newsJobTemplate:1557928791965
2019-05-15 13:59:52,066Z  INFO  [nio-8081-exec-2] c.m.f.s.logger.SchedulingListener                  : Job scheduled: newsJobTemplate:1557928791965
2019-05-15 14:00:18,660Z  INFO  [eduler_Worker-1] c.m.f.s.logger.TriggerStateListener                : Trigger fired: QUARTZ_JOBS.newsJobTemplate:1557928791965 {}
2019-05-15 14:00:18,703Z  INFO  [eduler_Worker-1] c.m.f.s.logger.JobExecutionListener                : Job will be executed: QUARTZ_JOBS.newsJobTemplate:1557928791965
2019-05-15 14:00:19,284Z  INFO  [eduler_Worker-1] c.m.f.s.logger.JobExecutionListener                : Job was executed: QUARTZ_JOBS.newsJobTemplate:1557928791965

1 Ответ

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

Я нашел крошки тут и там, которые предположили, что проблема связана с транзакцией.Поэтому я удалил @Transactional из метода сервиса и вуаля, он работал.Похоже, что когда вы вызываете триггер, поток планировщика асинхронно пытается найти расписания и триггеры из БД, но транзакция в это время не фиксируется.Позже поток планировщика снова ищет базу данных и, наконец, находит ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...