[英]spring batch structure for parallel processing
我正在寻求有关如何构造Spring Batch应用程序以获取一堆可能很大的分隔文件(每个文件具有不同格式)的指南。
要求很明确:
我们有一个使用MultiResourceItemReader的步骤,该顺序依次处理文件。 文件是超时的输入流。
理想情况下,我认为我们希望拥有
提前致谢。
这很有趣。 我将实现一个客户线令牌生成器,该客户端扩展了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.