使用spring批处理从csv文件中读取选择性列

时间:2015-10-12 07:43:22

标签: spring-batch

有一个csv文件有100列,但我们只需要3-5列需要加载到数据库中。

我不想在job xml中指定linetokenizer中的所有100列。

请建议我们如何处理此案例

1 个答案:

答案 0 :(得分:3)

尝试使用自定义fieldSetMapper。您可以使用它与具有索引的ResultSet类似。 只有在需要自动映射时才必须列出所有列名。 在您的情况下仅指定分隔符","

<bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"  scope="step">
    <property name="resource" value="YOURFILE" />
     <property name="lineMapper">
         <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
             <property name="fieldSetMapper">
                <bean class="CUSTOMFIELDSETMAPPER" />
            </property>
             <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="delimiter" value="," />
                </bean>
            </property>
         </bean>
     </property>
 </bean>

自定义映射器可能是这样的,如果你想阅读第1列和第25列:

public class CustomMapper implements FieldSetMapper<CustomPOJO>{

    @Override
    public CustomPOJO mapFieldSet(FieldSet fieldSet) throws BindException {
        CustomPOJO result = new CustomPOJO();
        result.setName(fieldSet.readString(0));
        result.setAddress(fieldSet.readString(24));
        return result;
    }

}

有关如何使用阅读器的进一步说明,请参阅this tutorial