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