So überspringen Sie Leerzeilen in CSV mit FlatFileItemReader und chunks

Ich verarbeite CSV-Dateien mit FlatFileItemReader.

Manchmal werden in der Eingabedatei leere Zeilen angezeigt.

Wenn das passiert ist, hört der ganze Schritt auf. Ich möchte diese Zeilen überspringen und normal weitermachen.

Ich habe versucht, @ hinzuzufüg Ausnahme-Handler zum Schritt, um die Ausführung abzufangen, anstatt den gesamten Schritt bücken zu müssen:

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

Seit ich mit @ verarbei Chunks Wenn eine leere Zeile eintrifft und eine Ausnahme abgefangen wird, passiert, dass der gesamte Block @ is übersprungen (Der Block enthält möglicherweise gültige Zeilen in der CSV-Datei und diese werden auch übersprungen.)

Keine Idee, wie man das richtig macht, wenn man Dateien in Stücken verarbeitet?

anke, ra

Nach der Bearbeitung meines Codes. immer noch nicht übersprungen:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage