我正在寻求一些指导,请参考如何构建一个Spring批处理应用程序来摄取一堆可能很大的分隔文件,每个文件都有不同的格式。
要求很明确:
我们有一个步骤,它使用MultiResourceItemReader按顺序处理文件。文件是超时的输入流。
理想情况下,我认为我们想拥有
提前致谢。
答案 0 :(得分:0)
这是一个有趣的。我实现了一个扩展DelimitedLineTokenizer
并实现LineCallbackHandler
的客户行标记器。然后我将FlatFileItemReader
配置为跳过第一行(列名列表)并将第一行传递给处理程序/标记生成器以设置所有标记名称。
然后,自定义FieldSetMapper
会收到包含您所有姓名/值对的FieldSet
,我只会将其传递给ItemProcessor
。然后,您的处理器可以构建您的JSON字符串并将它们传递给您的编写者。
答案 1 :(得分:0)
显然,你的工作属于典型的 - 读者 - >处理器 - >编写器类别,编写器在您的情况下是可选的(如果您不希望在发送到RESTFul API之前保留JSON),或者您可以调用步骤将{JSON}发送到REST服务Writer
如果{ {1}}在收到服务响应后完成。
无论如何,您不需要单独的步骤来了解文件名。使其成为应用程序初始化代码的一部
here列出了并行化应用程序的策略。
你刚才说了一堆文件。如果这些文件中的行数具有相似的计数,我会采用分区方法(即通过实现Writer
接口,我将每个文件移交给一个单独的线程,该线程将执行一步 - 读者 - >处理器 - >编写者)。在这种情况下你不需要Partitioner
但是简单的单个文件阅读器,因为每个文件都有自己的阅读器。 Partitioning
如果这些文件中的行数变化很大,即如果一个文件需要花费数小时而另一个文件在几分钟内完成,则可以继续使用MultiResourceItemReader
,但使用Multi-threaded Step的方法来实现并行性。这是块级并行,所以你可能必须使读者线程安全。
由于您的步骤不是独立的,因此方法Parallel Steps看起来不适合您的情况。
希望它有所帮助!!