如果我正确地理解了spring-batch的读取器机制,那么在读取器步骤中就不会为多线程提供机制。我一直在尝试使用数据库主键上的模块化算法作为多线程查询的分区机制。我的问题有两个方面:
(1)在读者步骤中,我是否遗漏了运行多线程的能力,特别是在数据库查询方面?
(2)如果我想出了一个好的解决方案,是否值得为此打开一个Jira,并将它提交给春季批代码库?显然,https://github.com/spring-projects/spring-batch/blob/master/CONTRIBUTING.md将是起点,但是Spring似乎没有一个明显的通信邮件列表。所以我想在开罚单之前我会问这个问题。
发布于 2019-03-13 15:30:00
可以通过向表中添加一个名为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;
}https://stackoverflow.com/questions/49178040
复制相似问题