【问题标题】:Spring Batch, read whole csv file before reading line by lineSpring Batch,在逐行读取之前读取整个csv文件
【发布时间】:2017-12-07 09:17:18
【问题描述】:

我想读取一个 csv 文件,用来自其他外部系统的一些数据丰富每一行,然后将新丰富的 csv 写入某个目录 现在要从外部系统获取数据,我需要一一传递每一行并从外部系统获取新列。 但是要使用每一行查询外部系统,我需要通过发送特定列的所有值来传递我从外部系统获得的值。 例如 - 我的 csv 文件是 -

姓名、价值、年龄

10,v1,12

11,v2,13

为了丰富我首先需要根据总年龄获取一个值 - 即 12 + 13 并从外部系统获取总价值,然后我需要将每一行的总和发送到外部系统以获得丰富的价值. 我正在使用弹簧批处理但使用 fLatFileReader 我一次只能读取一行。在此之前我将如何引用整个专栏。

请帮忙。

谢谢

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    有两种方法可以做到这一点。

    选项 1

    如果您可以将所有记录存储在内存中,请选择此选项。完全取决于您需要多少条记录来计算总年龄。

    阅读器(自定义阅读器): 编写逻辑以一次读取一行。 只有当您觉得所有行都被读取以计算总年龄时,您才需要从 read() 返回 null。

    注意:- 阅读器将循环 read() 方法,直到它返回 null。

    处理器:您将获得完整的记录列表。计算总年龄。 连接外部系统并获取价值。形成需要写入的记录,并从process方法中返回。

    注意:- 您可以返回由特定字段修改的所有记录或合并单个记录。这完全是您的选择。

    Writer:写入记录。

    选项 2

    如果选项 1 不可行,请执行此操作。

    Step1:读取所有行并计算总年龄并将值传递到下一步。

    第2步:再次读取所有行并使用所需的更新更新记录并写入相同的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多