Я рассмотрел множество вопросов, заданных на 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);
}
Любая помощь или указатель будет большим подспорьем.