首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧批多线程数据库读取器

弹簧批多线程数据库读取器
EN

Stack Overflow用户
提问于 2018-03-08 16:33:27
回答 1查看 1.3K关注 0票数 4

如果我正确地理解了spring-batch的读取器机制,那么在读取器步骤中就不会为多线程提供机制。我一直在尝试使用数据库主键上的模块化算法作为多线程查询的分区机制。我的问题有两个方面:

(1)在读者步骤中,我是否遗漏了运行多线程的能力,特别是在数据库查询方面?

(2)如果我想出了一个好的解决方案,是否值得为此打开一个Jira,并将它提交给春季批代码库?显然,https://github.com/spring-projects/spring-batch/blob/master/CONTRIBUTING.md将是起点,但是Spring似乎没有一个明显的通信邮件列表。所以我想在开罚单之前我会问这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 15:30:00

可以通过向表中添加一个名为STATUS的列来跟踪已处理的记录的状态,从而很容易做到这一点。最初,当您将数据加载到表中时,将状态设置为“未处理”,当您的ItemReader读取记录块时,将状态设置为“正在进行”。一旦您的ItemProcessor或ItemWriter完成了它的处理,将状态从“进行中”更改为“已处理”。确保将数据库中的数据提取为“同步”的方法。这将确保多个线程不会从数据库中获取相同的数据。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49178040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档