如何在Spring Batch中处理之前验证csv文件的头/尾

时间:2016-10-26 06:41:19

标签: spring spring-batch spring-validator

我有一个csv文件,我需要处理并在数据库中插入数据,这是我做的非常简单的工作, 但现在我的问题是在数据库中插入数据之前我需要检查是否第一行csv文件有标题,如果没有丢弃文件,例如第一行必须是HDR | DEPT | DATE 最后一行 - TLR | NumberOfRows 如果这些第一行和最后一行不存在,请忽略此文件,

1 个答案:

答案 0 :(得分:2)

只需编写一个TaskletStep作为第一步。打开文件,阅读并检查第一行,然后逐行读取,直到找到最后一行,检查它。

如果第一行和最后一行与预期不符,则抛出适当的异常。

您不能简单地使用SpringBatch FlatFileItemReader的页眉和页脚回调,因为在处理完所有文件后会调用页脚回调。

编辑:添加了示例

这样的事情:

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Bean
public Job job() throws Exception {
    return this.jobBuilderFactory.get(JOB_NAME)
              .start(validateStep())
              .next(yourNormalStepGoesHere())
              .build();
}

@Bean
protected Step validateStep() throws Exception {
    return this.stepBuilderFactory.get("SimpleTest_step1_Step")
    .tasklet(tasklet())
    .build();
}

@Bean
protected Tasklet tasklet() {
    return (contribution, context) -> {
             // open file
             // read first line
             // check first line
             // read lines until last line is read
             // check last line
             // close file 
             return RepeatStatus.FINISHED;
    };
}