Cómo omitir líneas en blanco en CSV usando FlatFileItemReader y fragmentos
Estoy procesando archivos CSV usando FlatFileItemReader.
A veces obtengo líneas en blanco dentro del archivo de entrada.
Cuando eso sucedió, todo el paso se detiene. Quiero omitir esas líneas y proceder normalmente.
Traté de agregarmanejador de excepciones al paso para capturar la ejecución en lugar de hacer que todo el paso se detenga:
@Bean
public Step processSnidUploadedFileStep() {
return stepBuilderFactory.get("processSnidFileStep")
.<MyDTO, MyDTO>chunk(numOfProcessingChunksPerFile)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.exceptionHandler((context, throwable) -> logger.error("Skipping record on file. cause="+ ((FlatFileParseException)throwable).getCause())),
.build();
}
Como estoy procesando controzos cuando llega una línea en blanco y se detecta una excepción, lo que sucede es que todo el fragmento esomitido(el fragmento podría contener líneas válidas en el archivo CSV y también se omiten)
¿Alguna idea de cómo hacer esto bien al procesar archivos en fragmentos?
Gracias Ray.
Después de editar mi código. Todavía no saltando:
public Step processSnidUploadedFileStep() {
SimpleStepBuilder<MyDTO, MyDTO> builder = new SimpleStepBuilder<MyDTO, MyDTO>(stepBuilderFactory.get("processSnidFileStep"));
return builder
.<PushItemDTO, PushItemDTO>chunk(numOfProcessingChunksPerFile)
.faultTolerant().skip(FlatFileParseException.class)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.build();
}