Запуск задания Quartz периодически пропускается в запланированное время в рабочей среде

Я рассмотрел множество вопросов, заданных на stackoverflow и многих других сайтах, но до сих пор не нашел удачи в решении моей проблемы.

Мы запланировали около 35 заданий в период с 9:30 до 10 утра, но иногда от 3 до 5 заданий пропустили выполнение и после запуска отсутствующих заданий, поскольку система запуска Adhoc снова начинает работать правильно со следующего дня. Это повторится через несколько дней или недель.

Мы используем кварцевую версию 2.2.3 и весеннюю пакетную версию 4.2.0.RELEASE.

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

Ниже приведены свойства кварца,

<property name="quartzProperties">
    <props>
        <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
        <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
        <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
        <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
        <prop key="org.quartz.jobStore.useProperties">false</prop>
        <prop key="org.quartz.jobStore.tablePrefix">#{'${db.defaultschema}' != '' ? '${db.defaultschema}'+'.QRTZ_' : 'QRTZ_'}</prop>
        <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
        <prop key="org.quartz.jobStore.isClustered">true</prop>
        <prop key="org.quartz.jobStore.dataSource">dataSource</prop>
        <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
        </prop>
    </props>
</property>

Конфигурация пакетного задания Spring:

<batch:job id="reportJob">
    <batch:step id="step1">
        <batch:tasklet>
            <batch:chunk reader="reports-reader" processor="reports-processor"
                writer="reports-writer" commit-interval="0">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="batchJobListener" />
    </batch:listeners>
</batch:job>
<bean id="reports-reader" scope="step"
    class="com.company.reportloader.reader.ReportsItemReader">
    <property name="reportsItemReaderService" ref="reportsItemReaderService"></property>
</bean>

<bean id="reports-processor" class="com.company.reportloader.processor.ReportsItemProcessor"></bean>
<bean id="reports-writer" class="com.company.reportloader.writer.ReportsItemWriter">
</bean>

Переопределение executeInternal QuartzJobBean и создание jobParameters для вызова весеннего пакетного задания, как показано ниже,

@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  launcher.run(job, jobParameters);
}

Любая помощь или указатель будет большим подспорьем.


person Vivek    schedule 24.12.2020    source источник
comment
Пожалуйста, дайте мне знать, как настраиваются или запускаются пакетные задания spring. Вышеуказанная конфигурация не говорит об этом.   -  person Rakesh    schedule 25.12.2020
comment
Не всегда происходит сбой, но периодически некоторые триггеры пропускаются в кварце для запуска заданий.   -  person Vivek    schedule 28.12.2020
comment
Я нашел github.com/quartznet/quartznet/issues/735, может кто-нибудь помочь меня в понимании первопричины. Дело в кварце?   -  person Vivek    schedule 11.01.2021
comment
Мы запускаем кварцевый планировщик в среде кластера. с 3-4 узлами планировщика. Он не реплицируется ни в какой другой среде (UAT, локальной, QA и т. д.), даже если одновременно выполняется 3000 заданий и уменьшается память сервера. Любая помощь будет оценена по решению проблемы.   -  person Vivek    schedule 18.01.2021
comment
Я также просмотрел stackoverflow.com/questions/618265/, но до сих пор не нашел основной причины этого. Какие-либо предложения.   -  person Vivek    schedule 20.01.2021


Ответы (1)


У нас была проблема с кодом, когда мы обновили инструкцию по пропуску зажигания до 2 в функции редактирования задания. Мы решили проблему, установив для misfire_instr в таблице qrtz_triggers значение 0. Каким-то образом планировщик считает несколько заданий ошибочно запущенными, из-за чего задания не запускались в запланированное время. Для cron-триггера ниже приведено определение инструкции осечки,

**smart policy - default**  See: withMisfireHandlingInstructionFireAndProceed

**withMisfireHandlingInstructionIgnoreMisfires**
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICYQTZ-283    All misfired executions are 
immediately executed, then the trigger runs back on schedule.
Example scenario: the executions scheduled at 9 and 10 AM are executed immediately. 
The next scheduled execution (at 11 AM) runs on time.

**withMisfireHandlingInstructionFireAndProceed**
MISFIRE_INSTRUCTION_FIRE_ONCE_NOW   Immediately executes first misfired execution and 
discards other (i.e. all misfired executions are merged together). Then back to 
schedule. No matter how many trigger executions were missed, only single immediate 
execution is performed.
Example scenario: the executions scheduled at 9 and 10 AM are merged and executed only 
once (in other words: the execution scheduled at 10 AM is discarded). The next 
scheduled execution (at 11 AM) runs on time.

**withMisfireHandlingInstructionDoNothing**
MISFIRE_INSTRUCTION_DO_NOTHING    All misfired executions are discarded, the scheduler 
simply waits for next scheduled time.
Example scenario: the executions scheduled at 9 and 10 AM are discarded, so basically 
nothing happens. The next scheduled execution (at 11 AM) runs on time.

После обновления misfire_instr до 0 из-за интеллектуальной политики (по умолчанию) кварц запускает задания с ошибками в течение 3-5 минут после снижения нагрузки.

person Vivek    schedule 27.01.2021