Весенняя партия записывает позицию шкипера в CSV-файл - PullRequest
0 голосов
/ 07 марта 2019

Я хочу написать строки шкипера в первом файле CSV и результат процессора во втором файле за один шаг, но он не работает!

Мой код:

        // => Step cecStep1
    @Bean
    public Step cecStep1(StepBuilderFactory stepBuilders) throws IOException {
        return stepBuilders.get("fileDecrypt")
                .<CSCivique, String>chunk(100)
                .reader(reader1())
                .processor(processor1FileDecrypt())
                .writer(writer1())
                .faultTolerant()
                .skip(Exception.class)
                .skipLimit(100)
                .listener(new MySkipListener())
                .build();
    }

// ##################################### Step SkipListener ##########################################################

открытый статический класс MySkipListener реализуетSkipListener {

        private BufferedWriter bw = null;

        public MySkipListener(File file) throws IOException {
            //this.fileWriter = new FileWriter(file);
            bw= new BufferedWriter(new FileWriter(file, true));
            System.out.println("MySkipListener =========> :"+file);
        }

        @Override
        public void onSkipInRead(Throwable throwable) {
            if (throwable instanceof FlatFileParseException) {
                FlatFileParseException flatFileParseException = (FlatFileParseException) throwable;
                System.out.println("onSkipInRead =========> :");
                try {
                        bw.write(flatFileParseException.getInput()+"; Vérifiez les colonnes !!");
                        bw.newLine();
                        bw.flush();
                  // fileWriter.close();
                } catch (IOException e) {
                    System.err.println("Unable to write skipped line to error file");
                }
            }
        }

        @Override
        public void onSkipInWrite(CSCivique item, Throwable t) {
            System.out.println("Item " + item + " was skipped due to: " + t.getMessage());
        }

        @Override
        public void onSkipInProcess(CSCivique item, Throwable t) {
            System.out.println("Item " + item + " was skipped due to: " + t.getMessage());
        }
    }           


    @Bean
    public FlatFileItemWriter<String> writer1() {
        return new FlatFileItemWriterBuilder<String>().name(greetingItemWriter)
                .resource(new FileSystemResource("target/test-outputs/greetings.csv"))
                .lineAggregator(new PassThroughLineAggregator<>()).build();
    }

Tankyou!

1 Ответ

0 голосов
/ 07 марта 2019

В вашем процессоре вы можете:

  • генерирует пропускаемое исключение для недопустимых элементов, чтобы пропускающий прослушиватель перехватывал их и записывал в указанный файл
  • разрешить доступным элементам отправителю записи, чтобы они были записаны так, как настроено в модуле записи

Например:

class MyItemProcessor implements ItemProcessor<Object, Object> {
    @Override
    public Object process(Object item) throws Exception {
        if (shouldBeSkipped(item)) {
            throw new MySkippableException();
        }
        // process item
        return item;
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...