1
我想使用Spring Batch來讀取文件列表並將它們作爲文件中每一行的項目進行處理。在文件末尾,我想要對文件中的行進行計數。哪個API可以讀取文件列表以便描述它們?
在Spring Batch中使用哪個API來知道某個項目在下一個開始之前代表文件的結尾?
我想使用Spring Batch來讀取文件列表並將它們作爲文件中每一行的項目進行處理。在文件末尾,我想要對文件中的行進行計數。哪個API可以讀取文件列表以便描述它們?
在Spring Batch中使用哪個API來知道某個項目在下一個開始之前代表文件的結尾?
我想你正在使用基於記錄的文件。
使用MultiResourceItemReader
(讀取多個文件)和FlatFileItemReader
(解析文件)。
我們的目的是檢測當一個文件到達終點這樣一個PeekableItemReader
我們先行下一個記錄,如果這是null
我們遇到EOF
class EOFCheckItemReader<T> extends SingleItemPeekableItemReader<T> {
private int count;
T read() {
T item = super.read();
if(null == item) {
// EOF detected
manageEOF();
count = 0;
}
else {
count++;
}
return item;
}
private void manageEOF() {}
// Also implements update(), open(), close()
// to save count value into execution context
// No need to save delegate's state because we register it
// as stream into job's xml definition
}
春季批次heavly基於代表團因此,使用MultiResourceItemReader
或SingleItemPeekableItemReader
的財產「代表」,我們可以輕鬆解決問題。 這是一個簡單的骨架(只是一個想法,我不能測試它不好意思):
<bean name="csvReader" class="FlatFileItemReader">
<!-- set all properties -->
</bean>
<bean name="eofCheckReader" class="EOFCheckItemReader">
<property name="delegate" ref="multiResourceReader" />
</bean>
<bean name="multiResourceReader">
<property name="resources" value="file://*.csv" />
<property name="delegate" ref="csvReader" />
</bean>
<step>
<chunk reader="eofCheckReader" />
<streams>
<stream ref="multiResourceReader" />
</streams>
</step>
你能在最終的文件記錄API擴展? – hawkeye
檢查我的編輯... –