Spring Batch 多线程数据库读取器

4
如果我理解正确,spring-batch的读取器机制在读取步骤中没有提供多线程机制。我一直在尝试使用数据库主键上的模运算作为分区机制来实现查询的多线程化。我的问题有两个:
(1)我是否错过了在读取步骤中运行多个线程的能力,特别是关于进行数据库查询的情况?
(2)如果我想出一个好的解决方案,是否值得为此打开Jira并将其提交回spring-batch代码库?显然https://github.com/spring-projects/spring-batch/blob/master/CONTRIBUTING.md是起点,但Spring的人似乎没有明显的邮件列表用于沟通。因此,我想在打开工单之前先问一个问题。
1个回答

1

通过添加一个名为STATUS的列来追踪已处理记录的状态,可以轻松完成此操作。开始加载数据到表中时,将状态设置为“未处理”,当您的ItemReader读取一批记录时,将状态设置为“正在处理”。一旦您的ItemProcessor或ItemWriter完成处理,将状态从“正在处理”更改为“已处理”。确保从数据库提取数据的方法是“同步”的。这将确保多个线程不会从数据库中获取相同的数据。

public List<DomainObject> read(){
  return fetchDataFromDb();
}

private synchronized List<DomainObject> fetchProductAssociationData(){
  //read your chunk-size of records from database which has status as 'NOT PROCESSED' 
  and change the status of the data which is read to 'IN PROGRESS'
  return list;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接