我想将动态文件名传递给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"); }
}
}
谢谢。
答案 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();
}
希望这会有所帮助。