目标:有一个文件阅读器,可以从1到N次调用,在Spring批处理中使用不同的文件名,而不必每次读取都关闭/重新打开文件。
到目前为止我所拥有的:
我使用以下bean粗略地读取程序以读取CSV文件:
@Bean
public ItemReader<DataLoadRecordClass> dataLoadFileItemReader() {
this.inputRecords = new DataLoadRecordListClass();
FlatFileItemReader<DataLoadRecordClass> reader = new FlatFileItemReader<DataLoadRecordClass>();
reader.setEncoding("UTF-8");
reader.setLinesToSkip(1); //skip header line
reader.setResource(new FileSystemResource(String.format(this.fileSystemBasePath,storeName) + this.fileBasePath + this.inFileName));
LineMapper<DataLoadRecordClass> dataFileLineMapper = buildLineMapper();
reader.setLineMapper(dataFileLineMapper);
return reader;
}
StoreName和inFileName将在运行时指定,并且通常至少需要运行4个商店,但要求它运行1到N个商店。
显然,在编写代码时,它只适用于1个商店和1个文件。如何扩展它以便它可以运行1到N个存储区,每个存储区中有1到N个文件,并行并行?我不想为每个可能的商店和文件创建bean,因为它们的唯一区别在于文件名和路径。
谢谢!
答案 0 :(得分:0)
这允许我传入变量
@Bean
@StepScope
public FlatFileItemReader<DataLoadRecordClass> dataLoadFileItemReader(@Value("#{jobParameters['myParam']}" String storeNameEntry) {
..etc..
}
最大的问题是你不能使用ItemReader,你必须返回FlatFileItemReader,否则你将收到一个无法打开阅读器的错误。这只发生在StepScope上。