【问题标题】:SpringBatch accessing Line Number in Item processorSpring Batch 访问 Itemprocessor 中的行号
【发布时间】:2020-11-15 02:28:48
【问题描述】:

我正在读取包含数千条记录的 CSV 文件,对其进行处理并将记录保存在数据库中,我正在 ItemPreocessor 中进行验证并将错误写入文件,我需要将错误记录的行号写入如下

LineNumber 字段错误 4岁阴性 5 类型无效 5 邮编无效

如何在 ItemProcessor 中获取行号,非常感谢任何帮助。文件中没有唯一标识符,因此显示行号是强制性的,它来自外部来源。

谢谢, 加尔

【问题讨论】:

  • 输入的 CSV 是否包含行号列?使用提供的信息很难得出您所需要的确切答案。您能否提供一个示例输入 CSV 以及您如何构建错误。

标签: java spring spring-boot spring-data-jpa spring-batch


【解决方案1】:

也许您可以检查所有可用的注释并创建一个符合您要求的流程 (https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/annotation/package-summary.html)。 例如,以下处理器将在块处理数据之前将 lineNumber 初始化为 0。但是,如果文件包含超过块大小,则应将已执行的块数存储在执行上下文中,然后添加到 lineNumber。

public class RecordProcessors implements ItemProcessor<Record , List<Record >> {
  private int lineNumber;
  @BeforeChunk
  public void init() {

    lineNumber = 0;
  }

  @Override
  public List<Record> process(Record record) {

    // do validation
    record.setLineNumber(lineNumber)
    return record;
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2023-02-10
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多