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();
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta