Spring批处理将动态文件名传递给onSkipInRead

时间:2019-03-18 00:06:37

标签: spring-batch

我想将动态文件名传递给onSkipInRead。 例:       public MySkipListener(@Value(“#{jobParameters ['file']}”)字符串文件)引发IOException {             bw = new BufferedWriter(new FileWriter(file);         System.out.println(“ MySkipListener =========>:” + bw);       }

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

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在侦听器中使用文件创建构造函数,并在定义步骤时将文件传递给它。这是一个示例:

class MySkipListener implements SkipListener<Integer, Integer> {

    private FileWriter fileWriter;

    public MySkipListener(File file) throws IOException {
        this.fileWriter = new FileWriter(file);
    }

    // your onSkipInRead method
}

然后在定义步骤时将作业参数文件传递给侦听器:

@Bean
@JobScope
public Step step(@Value("#{jobParameters['file']}") String file) throws IOException {
    return stepBuilderFactory.get("step")
            .<Integer, Integer>chunk(5)
            .reader(itemReader())
            .writer(itemWriter())
            .listener(new MySkipListener(new File(file)))
            .build();
}

希望这会有所帮助。