Spring 批处理作业挂起 - 并发步骤和每个步骤使用多个线程

Spring Batch Job hangs - concurrent steps and each step using multiple threads

我正在使用 Spring 批处理处理来自数据库 tables 的记录,使用以下场景:

  1. 使用 5 个并行步骤同时处理来自 5 table 秒的数据
  2. 每个并行步骤还有 5 个线程来处理来自单个 table
  3. 的记录

这里是作业配置的总结:TestJob -> Parallel Step1 & Step2 -> Step 1 using 2 threads, Step 2 using 2 threads

对于 Spring 批处理 tables 我尝试使用 SQL 服务器数据库,内存数据库中的 HSQL 但是不知何故 Spring 批处理卡住了BATCH_STEP_EXECUTION_SEQ Spring 批量尝试插入 BATCH_STEP_EXECUTION table 所以试图从 BATCH_STEP_EXECUTION_SEQ table 它挂起的地方获取 ID。

我正在使用 Spring Boot 2.2.2.RELEASE 版本。我尝试使用不同的创建隔离级别覆盖 jobrepository 配置,但问题始终存在。

注意: 在以下时间一切正常:

  1. 一次处理并发 table 秒,每个 table 由单个线程处理
  2. 一次处理单个 table 并且单个 table 由多个线程处理

非常感谢任何 help/pointer 解决问题。

谢谢, 哈克里山

只是为了可能面临同样问题的其他人着想。问题似乎与数据库特定表和序列的配置有关。我尝试使用 SQL 服务器,默认提供的数据库脚本仍然存在问题。然后我再次尝试使用 Hsql 内存数据库问题仍然存在。然后我尝试使用 H2 内存数据库并且它可以使用它。它还适用于 MapJobRepositoryFactoryBean。

因此您可能需要根据数据库调整 DDL。

谢谢!