Spring Batch Item Reader - use skippedLinesCallback to set input field names

夙愿已清 提交于 2019-12-21 19:53:29

问题


I have a simple job as below:

<batch:step id="step">
<batch:tasklet>
    <batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="5000" />
</batch:tasklet>
</batch:step>

itemReader is as below:

<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">
                <bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="delimiter" value="," />
                    <property name="names" value="${INPUT_FILE_FIELDS}" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
            </property>
        </bean>
    </property>
    <property name="resource" value="#{stepExecutionContext['inputKeyName']}" />
</bean>

I am getting input files with a single line header. I want to set the header line as ${INPUT_FILE_FIELDS} for the reader. I am trying to achieve it using skippedLinesCallback property but got stucked in the process.

Is there anyway by which I can read the header line and set it as input_fields for the reader to parse rest of the records in the file. Please suggest.


回答1:


You can:

  1. declare your DelimitedLineTokenizer bean not anonymous (call it lineTokenizer)
  2. in skippedLinesCallback set lineTokenizer reference as property
  3. in your SkippedLineCallback: split header then set as names in lineTokenizer ref setted before


来源:https://stackoverflow.com/questions/18125501/spring-batch-item-reader-use-skippedlinescallback-to-set-input-field-names

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!