【问题标题】:Spring Batch Multithreaded DB ReaderSpring Batch 多线程数据库读取器
【发布时间】:2018-08-17 02:20:12
【问题描述】:

如果我理解正确的话,spring-batch 的阅读器机制并没有在阅读器步骤中提供多线程机制。我一直在尝试一些关于在数据库的主键上使用模运算作为多线程查询的分区机制的想法。我的问题有两个:

(1) 我是否错过了在阅读器步骤中运行多个线程的能力,尤其是在进行数据库查询方面?

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

【问题讨论】:

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


    【解决方案1】:

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

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 2018-01-16
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多