繁体   English   中英

春季批仍在执行中

[英]spring batch remains in EXECUTING

我创建了一个使用org.springframework.batch.item.database.HibernateCursorItemReader类型的阅读器来执行查询的作业。

问题是数据库连接在这种情况下达到连接限制(我遇到了oracle错误ORA-12519, TNS:no appropriate service handler found ),并且令人惊讶地,我注意到exit_code=EXECUTING and status=STARTED on BATCH_STEP_EXECUTION table.

如果我再次运行该作业,它将响应"A job execution for this job is already running"并且如果我"A job execution for this job is already running"发出-restart ,它将抱怨并显示消息"No failed or stopped execution found for job".

Spring Batch如何处理这些致命故障情况? 我必须手动删除这些执行信息还是有重置选项? 感谢您的任何帮助

当前版本的Spring Batch(2.2.0)似乎没有针对这种情况的现成解决方案。 如本问题所述 ,可能需要在数据库中进行“手动”干预。 或者,如果这是一个正在挂起的特定作业(即您知道该作业的名称),则也可以执行以下操作;

  • 使用JobExplorer.findRunningJobExecutions(jobName)
  • 浏览执行列表并使其“失败” JobExecution.upgradeStatus(BatchStatus.FAILED)
  • 使用JobRepository.update(jobExecution)保存更改

仅供参考,为什么在使用CursorItemReader(JDBCCursorItemReader或HibernateCursorItemReader)时会出现连接限制问题

即使已经为事务打开了一个连接,cursorItemReader也会打开一个单独的连接(Reader-> Processors-> Writer)。 因此,每个步骤执行都需要两个连接,即使它在单个事务中并且到达相同的数据库也是如此。 这会导致连接瓶颈,因此数据库连接数应为线程池中配置为并行执行步骤的线程数的两倍。 如果您提供与CursorReader的单独连接,也可以解决此问题。

JdbcPagingItemReader是ItemReader的另一种实现,它使用为事务打开的相同连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM