繁体   English   中英

弹簧批处理结构,用于并行处理

[英]spring batch structure for parallel processing

我正在寻求有关如何构造Spring Batch应用程序以获取一堆可能很大的分隔文件(每个文件具有不同格式)的指南。

要求很明确:

  1. 从外部来源中选择要提取的文件:每天可能有多个文件的多个发行版,因此必须选择最新的发行版
  2. 通过将分隔的字段与第一行的列名组合(将跳过),将每个文件的每一行转换为json
  3. 将json的每一行发送到RESTFul Api

我们有一个使用MultiResourceItemReader的步骤,该顺序依次处理文件。 文件是超时的输入流。

理想情况下,我认为我们希望拥有

  1. 识别要提取的文件的步骤
  2. 并行处理文件的步骤

提前致谢。

这很有趣。 我将实现一个客户线令牌生成器,该客户端扩展了DelimitedLineTokenizer并还实现了LineCallbackHandler 然后,我将配置FlatFileItemReader以跳过第一行(列名称列表),并将第一行传递给处理程序/令牌生成器以设置所有令牌名称。

然后,自定义FieldSetMapper将收到一个包含所有名称/值对的FieldSet ,我将其传递给ItemProcessor 然后,您的处理器可以构建您的JSON字符串,并将其传递给您的编写器。

显然,您的工作属于典型的- 读取器->处理器->写入器类别,在您的情况下,写入器是可选的(如果您不希望在发送到RESTFul API之前保留JSON),或者可以调用步骤将JSON发送到REST服务如果Writer在收到服务响应后完成,则作为Writer

无论如何,您不需要单独的步骤即可知道文件名。 使它成为应用程序初始化代码的一部分。

此处列出并行化应用程序的策略。

您刚才说了一堆文件。 如果这些文件中的行数具有相似的计数,我将采用分区方法(即,通过实现Partitioner接口,我将每个文件移交给一个单独的线程,并且该线程将执行一个步骤- 读取器->处理器->写入器 ) 。 在这种情况下,您不需要MultiResourceItemReader ,而是简单的单个文件阅读器,因为每个文件都有自己的阅读器。 分区

如果这些文件中的行数变化很大,即一个文件要花费数小时而另一个文件要在几分钟内完成,则可以继续使用MultiResourceItemReader但可以使用多线程步骤的方法来实现并行性。这是块级并行性,因此您可能必须使阅读器线程安全。

接近并行步骤似乎不适合您的情况,因为您的步骤不是独立的。

希望能帮助到你 !!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM