【发布时间】:2021-04-02 21:38:33
【问题描述】:
我已经通过 stackoverflow 和许多其他网站询问了许多问题,但仍然没有找到解决我的问题的运气。
我们在上午 9:30-10 之间安排了大约 35 个作业,但有时 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>
覆盖 QuartzJobBean 的 executeInternal 并创建 jobParameters 以调用 spring 批处理作业,如下所示,
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
launcher.run(job, jobParameters);
}
任何帮助或指针都会有很大帮助。
【问题讨论】:
-
请告诉我如何配置或触发 spring 批处理作业。上面的配置没有说这个。
-
它并不总是失败,而是间歇性地在石英中丢失了一些触发器来调用作业
-
我找到了github.com/quartznet/quartznet/issues/735,有人可以帮助我了解根本原因。是石英问题吗?
-
我们正在集群环境中运行石英调度程序。具有 3-4 个调度程序节点。即使同时运行 3000 个作业并减少服务器内存,它也不会在任何其他环境(UAT、本地、QA 等)中复制。任何帮助将不胜感激解决问题。
-
我也查看了stackoverflow.com/questions/618265/…,但仍然没有找到它的根本原因。任何建议。
标签: java spring-batch scheduled-tasks quartz-scheduler crontrigger