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

标签 java multithreading hibernate spring-boot spring-batch

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

线程会无缘无故挂起,可能我不知道根本原因。现在,在日志中,hibernate 将卡在 select 或 insert 语句处,并永远卡在那里。我真的不知道原因。对于事务,我有 required_new 和 read_commited 用于传播和隔离。其他一切都是 Spring Boot 的默认设置。

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

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

最佳答案

如果没有代码,很难说可能是什么问题。您需要准确地挖掘它被挂起的位置。可能的原因有

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

关于java - Spring Batch 多线程卡住,没有任何异常输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789449/

相关文章:

java - 将我的java项目变成可执行文件

java - 并发修改异常

regex - 如何为相似字符编写 JPQL 查询

hibernate - 使grails hibernate 过滤器

java - 在 Eclipse 启动时启动 Tomcat?

java - CSS 选择器 : Anchor text of href contains

java - 为正值添加加号 java

c++ - 带有 CWinThread 指针数组的 WaitForMultipleObjects

C++ 套接字 Send() 线程安全

java - Hibernate 查询中针对某一特定属性生成错误