Spring Batch多线程卡住,没有任何异常输出

时间:2019-02-20 15:08:11

标签: java multithreading hibernate spring-boot spring-batch

我正在为某些日常过程实现Spring Batch多线程。项目读取器,项目处理器和项目写入器都是bean(单个)。另外我正在使用Hibernate和spring数据jpa进行数据库访问。对于线程,我正在使用threadpooltaskexecutor。

线程将无缘无故地挂起,也许我不知道根本原因。现在,在日志中,休眠状态将停留在select或insert语句中,并永远挂在那里。我真的不知道原因。对于事务,我具有required_new和read_committed来进行传播和隔离。其他一切只是Spring Boot的默认设置。

我正在处理20k json,大小可能有所不同,但有些很大。我无法共享整个代码,因为我不知道问题出在哪里。基本上在项目处理器中,我只有很少的同步块来处理业务逻辑。

对于这个问题,我只想知道可能是什么原因?因为Java没有提供任何信息。

1 个答案:

答案 0 :(得分:0)

没有代码很难说出可能是什么问题。您需要确切地了解它的挂起位置。可能的原因是

  1. 在阅读器中,选择查询需要花费很长时间。 (可能是由于索引编制不正确或表可能已锁定)。您可以在阅读器中添加更多日志,以准确查明是哪个记录导致了此问题。
  2. 如果您在ItemProcessor中执行任何数据库操作,请添加日志并添加检查。
  3. 在作家中,插入可能需要很长时间才能完成写作。