【问题标题】:Spring Batch reading csv columns in different orderSpring Batch以不同的顺序读取csv列
【发布时间】:2013-08-21 22:15:15
【问题描述】:

我正在使用 Spring Batch 自动读取 csv 文件并将每一行映射到一个对象中。下面有代码。 csv 文件中的列是 ID、field1、field2、field3。这是我在 lineTokenizer 中写的顺序。但是,FlatFileItemReader 没有按此顺序读取文件。相反,它似乎以随机顺序读取,首先读取 field2,然后是 ID,然后是 field3,然后是 field1。但我希望它首先读取 ID,因为我正在尝试编写一个将 ID 映射到每个字段的映射。有没有办法改变 FlatFileItemReader 读取 csv 中的列的顺序?

<bean id="mappedPosition" class="com.jpmorgan.ib.colopt.input.MappedPosition" scope="prototype" />
<bean id="positionFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
      <property name="resource" value="position.csv" />
      <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="names" value="ID, field1, field2, field3" />
                       </bean>
                  </property>
                  <property name="fieldSetMapper">
                        <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                              <property name="prototypeBeanName" value="mappedPosition"/>
                        </bean>
                  </property>
                 </bean>
      </property>
</bean>

【问题讨论】:

    标签: csv spring-batch


    【解决方案1】:

    按预期,Spring-batch 按顺序从 CSV 读取和标记字段。
    问题在于BeanWrapperFieldSetMapper:将FieldSet 值注入bean 的属性映射器,从String[](按您的字段名称排序)到Properties(查看FieldSet.getProperties())以匹配属性值。
    我认为您可以使用StepExecutionListener 实现您的目标并在阅读后拦截项目(您将获得您的mappedPosition 完全填充)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多