У меня есть файл csv, который мне нужно обработать и вставить данные в базу данных, что очень простое задание, которое я сделал, , но теперь моя проблема перед вставкой данных в базе данных мне нужно проверить, есть ли первая строка файла csv с заголовком или нет, если не отменить файл, например первая линия должна быть HDR | DEPT | ДАТА последняя строка - TLR | NumberOfRows если это первая и последняя строка не существует игнорировать этот файл,Как проверить заголовок/порт для файла csv перед обработкой в Spring Batch
ответ
Просто напишите TaskletStep в качестве первого шага. Откройте файл, прочитайте и проверьте первую строку, затем прочитайте строку за строкой, пока не найдете последнюю строку, проверьте ее.
Выбросьте соответствующее исключение, если первая и последняя строка не соответствуют ожиданиям.
Вы не можете просто использовать обратные вызовы заголовка и нижнего колонтитула SpringBatch FlatFileItemReader, так как обратный вызов нижнего колонтитула вызывается после того, как все файлы обработаны.
EDIT: добавлен пример
Что-то вроде этого:
@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;
};
}
Прошу вас привести пример или образец, потому что я новичок в Spring, только начал учиться и реализовывать, спасибо заранее, –
Я добавил пример, посмотрю –
Вы смотрели на http://stackoverflow.com/questions/18517983/spring-batch-validate-header-lines- in-input-csv-file-and-skip-the-file-if-it-i? – Asoub