4

我有一个简单的工作如下:

<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">
                <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>

我正在获取带有单行标题的输入文件。我想将标题行设置为 ${INPUT_FILE_FIELDS} 供读者使用。我正在尝试使用 skippedLinesCallback 属性来实现它,但被困在了这个过程中。

无论如何我可以读取标题行并将其设置为 input_fields 以便读者解析文件中的其余记录。请建议。

4

1 回答 1

6

你可以:

  1. 声明您的 DelimitedLineTokenizer bean 不是匿名的(称为 lineTokenizer)
  2. 在 skippedLinesCallback 中将 lineTokenizer 引用设置为属性
  3. 在您的 SkippedLineCallback: 拆分标头中,然后将其设置为之前设置的 lineTokenizer ref 中的名称
于 2013-08-08T13:22:18.957 回答