【问题标题】:Spring Batch Job hangs - concurrent steps and each step using multiple threadsSpring Batch Job 挂起 - 并发步骤和每个步骤使用多个线程
【发布时间】:2020-11-21 08:32:10
【问题描述】:

我正在使用 Spring Batch 使用以下场景处理数据库表中的记录:

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

这里是作业配置的总结:TestJob -> Parallel Step1 & Step2 -> Step 1 使用 2 个线程,Step 2 使用 2 个线程

对于 Spring Batch 表,我尝试使用 SQL Server 数据库、内存数据库中的 HSQL,但是从 BATCH_STEP_EXECUTION_SEQ 中选择时,Spring 批处理卡住了 Spring 批处理尝试插入到 BATCH_STEP_EXECUTION 表中,因此试图从挂起的 BATCH_STEP_EXECUTION_SEQ 表中获取 ID。

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

注意: 在以下情况下一切正常:

  1. 一次处理并发表,每张表单线程处理
  2. 一次处理单表,多线程处理单表

非常感谢任何解决问题的帮助/指针。

谢谢, 哈尔克里山

【问题讨论】:

  • 这个问题是间歇性的,有时它正在工作
  • 我记得曾经遇到过类似的问题,不知道你是如何设置隔离级别的,但它必须是某种影响jobrepository的方式docs.spring.io/spring-batch/docs/current/reference/html/…
  • 感谢您指出设置隔离级别,我尝试了不同的隔离级别,但问题仍然存在。

标签: java spring multithreading parallel-processing spring-batch


【解决方案1】:

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

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

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多