我正在使用Spring Batch with Java 11开发一个批处理应用程序。这是我的reader()方法:
@SuppressWarnings("unchecked")
@Bean
public FlatFileItemReader<MyClass> reader() {
BeanWrapperFieldSetMapper beanWrapperMapper = new BeanWrapperFieldSetMapper<MyClass>();
beanWrapperMapper.setTargetType(MyClass.class);
return new FlatFileItemReaderBuilder<MyClass>()
.name("MyClassReader")
.resource(new FileSystemResource(inputFolder.concat(File.separator).concat("my-input-file.csv")))
.delimited()
.names("field1", "field2")
.fieldSetMapper(beanWrapperMapper)
.build();
}
我做了几个测试,当文件my-input-file.csv
存在时,批处理工作正常。但是,我希望得到以下行为:如果文件my-input-file.csv
丢失,我仍然希望将某些内容写入输出文件,并且不引发错误。现在,如果我运行批处理,但文件不在文件夹中,则会出现以下错误:
IllegalStateException: Input resource must exist (reader is in 'strict' mode): path [C:\\Users\\username\\Desktop\\src\\test\\resources\\my-input-file.csv]
我知道这个错误是因为找不到文件,但是我真的希望处理这个情况以生成一个不同的输出文件(我不希望批处理失败)。
如何才能做到这一点?
1条答案
按热度按时间roejwanj1#
1.将strict属性设置为false,以便不会发生输入资源异常。
1.批处理作业完成后检查readCount。如果readCount == 0,表示没有数据,您在这里处理您的逻辑。
您的案例示例(实现JobExecutionListener):