我创建了一个使用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",如果我对此任务发出-restart,它将报告消息"No failed or stopped execution found for job".
spring batch如何管理这些致命的失败情况?我是否必须手动删除这些执行信息,或者是否有重置选项?感谢您的帮助
发布于 2013-06-28 19:02:03
Spring Batch的当前版本(2.2.0)似乎没有针对这种情况的开箱即用解决方案。正如本question中所讨论的,可能需要在数据库中进行“手动”干预。或者,如果这是一个挂起的特定作业(即,您知道作业名称),您也可以执行以下操作;
在执行列表中使用JobExplorer.findRunningJobExecutions(jobName)
JobRepository.update(jobExecution)
‘(JobExecution.upgradeStatus(BatchStatus.FAILED))
JobRepository.update(jobExecution)‘
发布于 2014-03-22 02:17:59
仅供参考,为什么在使用CursorItemReader (JDBCCursorItemReader或HibernateCursorItemReader)时会出现此连接限制问题
即使已经为事务打开了一个连接(读取器、->处理器、->写入器),cursorItemReader也会打开一个单独的连接。因此,每个步骤的执行都需要两个连接,即使它在单个事务中并命中相同的数据库。这会导致连接瓶颈,因此db连接的数量应该是线程池中配置的线程数量的两倍,以便并行执行这些步骤。如果您提供到CursorReader单独连接,也可以解决此问题。
JdbcPagingItemReader是ItemReader的另一个实现,它使用为事务打开的相同连接。
https://stackoverflow.com/questions/17348062
复制相似问题