2017-03-06 513 views
0

目標:有一個文件讀取器可以從1到N次調用,在Spring批處理中使用不同的文件名,而不必在每次讀取時關閉/重新打開文件。如何在Spring Batch中使用不同的文件名多次調用FlatFileItemReader?

我到目前爲止有:

我草擬出來的程序使用以下豆讀取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

看看http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/MultiResourceItemReader.html –

+0

謝謝,但我發現的每一個例子仍然讓讀者看着一些設置文件名/路徑,即使它有一個通配符。我需要它能夠在運行時獲取文件名/路徑,並通過基本相同的步驟並行運行每個文件。 – VydorScope

+0

只需製作bean @ @ScopeScope,然後從'jobParameters'中注入一個變量,以便您可以參數化您的作業。 –

回答

0

這讓我在變量

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

的大收穫是你不能使用ItemReader對於這一點,你必須退回FlatFileItemReader或者你會得到一個錯誤,它無法打開讀者傳遞。這隻發生在StepScope上。

相關問題