我正在使用带有 OpenCSV 的 Spring Batch Tasklet 来读取我的 CSV 文件。在问这个问题之前,我知道块,但是在后面的步骤中文件之间存在交叉验证,所以我必须继续使用Tasklet。
我要做的是向我的报告步骤报告丢失的文件或解析错误。我不确定向下一步报告失败的正确方法应该是什么。我有以下代码。
读取文件的初始步骤。
public class CsvBatchReader<T> implements Tasklet, StepExecutionListener {
private final Logger logger = LoggerFactory.getLogger(CsvBatchReader.class);
private List batch;
private final Class<T> clazz;
private Path path;
public CsvBatchReader(Class<T> clazz, Path path) {
this.clazz = clazz;
this.path = path;
}
@Override
public void beforeStep(StepExecution stepExecution) {
logger.info("Reader initialized - " + clazz.getSimpleName());
batch = new ArrayList();
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
logger.info("Reader ended - " + clazz.getSimpleName());
return ExitStatus.COMPLETED;
}
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws UnexpectedJobExecutionException {
logger.info("Reader execute - " + clazz.getSimpleName());
ICsvToBean csvToBean = new CsvToBean(clazz, path);
try {
batch = csvToBean.readCsv();
} catch(IOException ex) {
// error message being caught from my csvToBean class.
throw new UnexpectedJobExecutionException("Invalid file " + ex.getMessage());
}
return RepeatStatus.FINISHED;
}
}
报告步骤
我不确定如何传入异常消息,或者是否定义了在不使用 Step Execution Context 的情况下传入失败消息的方法。
public class CsvBatchReporting implements Tasklet, StepExecutionListener {
private final Logger logger = LoggerFactory.getLogger(CsvBatchCrossValidation.class);
private List errorMessages;
private List skippedInserts;
人到中年有点甜
相关分类