繁体   English   中英

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

[英]How do I call FlatFileItemReader multiple times with different file names in 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,因为它们之间的唯一区别是文件名和路径。

谢谢!

这使我可以传递变量

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

最大的麻烦是您不能为此使用ItemReader,必须返回FlatFileItemReader,否则将收到一个错误消息,指出它无法打开阅读器。 这仅发生在StepScope中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM