3
我有如下一個簡單的工作:Spring Batch的 - 驗證標題行中輸入CSV文件,跳過該文件,如果它無效
<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit- interval="5000" />
</batch:tasklet>
</batch:step>
itemReader是如下:
<bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader"
scope="step">
<property name="linesToSkip" value="1"></property>
<property name="skippedLinesCallback" ref="skippedLinesCallback" ></property>
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer" ref="lineTokenizer">
<property name="delimiter" value="," />
</bean>
</property>
<property name="fieldSetMapper">
<bean
class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
</property>
</bean>
</property>
<property name="resource" value="#{stepExecutionContext['inputKeyName']}" />
</bean>
<bean id"lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<bean id="skippedLinesCallback" class="com.test.IteMReaderHeader" >
<property name="lineTokenizer" ref="lineTokenizer">
</bean>
我設置在「com.test.IteMReaderHeader」類中輸入字段的「名稱」,方法是在其中注入「lineTokenizer」。
我需要驗證輸入csv文件中第一行的標題行是否帶有固定標題值,如果標題行無效,那麼在這種情況下,我需要失敗該步驟並跳過整個文件,以便下一個文件可以用於閱讀。
請建議實現它的合適的方式。 我真的很感激你的時間和寶貴意見。
謝謝!的FlatFileItemReader
文件停止條件
感謝您的投入。 第二種方法(擴展FlatFileItemReader)工作正常。 有一些問題,同時使用第一方法(即實現ItemStreamReader) 此外,在上述情況下,纔有可能失敗的一步,但仍然跳過此文件? –
grathi
可能在步驟(或作業)執行上下文中保留headerError值,並在doOpen()/ doUpdate()/ doClose()或監聽器中對其進行管理。我從來沒有嘗試過,對不起。 –