我正在使用 multiResourceItemReader 读取 csv 文件,并且我将跳过限制保持为 10。当超过限制时,我想捕获SkipLimitExceedException并抛出我自己的自定义异常,并显示类似“Invalid csv”的消息,在哪里或如何我抓到了吗?
try {
log.info("Running job to insert batch fcm: {} into database.", id);
jobLauncher
.run(importJob, new JobParametersBuilder()
.addString("fullPathFileName", TMP_DIR)
.addString("batch_fcm_id", String.valueOf(id))
.addLong("time",System.currentTimeMillis())
.toJobParameters());
}
catch(...){...}
我在这里抓不到它,是不是因为我正在使用MultiResourceItemReader并且异步过程不允许我在这里抓到它?
我的工作如下
@Bean(name = "fcmJob")
Job importJob(@Qualifier(MR_ITEM_READER) Reader reader,
@Qualifier(JDBC_WRITER) JdbcBatchItemWriter jdbcBatchItemWriter,
@Qualifier("fcmTaskExecutor") TaskExecutor taskExecutor) {
Step writeToDatabase = stepBuilderFactory.get("file-database")//name of step
.<FcmIdResource, FcmIdResource>chunk(csvChunkSize) // <input as, output as>
.reader(reader)
.faultTolerant()
.skipLimit(10)
.skip(UncategorizedSQLException.class)
.noSkip(FileNotFoundException.class)
.writer(jdbcBatchItemWriter)
.taskExecutor(taskExecutor)
.throttleLimit(20)
.build();
return jobBuilderFactory.get("jobBuilderFactory") //Name of job builder factory
.incrementer(new RunIdIncrementer())
.start(writeToDatabase)
.on("*")
.to(deleteTemporaryFiles())
.end()
.build();
}
我尝试过使用 ItemReaderListener、SkipPolicy、SkipListener,但它们不能抛出异常,还有其他方法吗?