如何在Spring Batch中使用不同的文件名多次调用FlatFileItemReader?

时间:2017-03-06 13:33:57

标签: java spring spring-batch

目标:有一个文件阅读器,可以从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,因为它们的唯一区别在于文件名和路径。

谢谢!

1 个答案:

答案 0 :(得分:0)

这允许我传入变量

@Bean
@StepScope
public FlatFileItemReader<DataLoadRecordClass> dataLoadFileItemReader(@Value("#{jobParameters['myParam']}" String storeNameEntry) {  
..etc..
}

最大的问题是你不能使用ItemReader,你必须返回FlatFileItemReader,否则你将收到一个无法打开阅读器的错误。这只发生在StepScope上。