【问题标题】:read only selective columns from csv file using spring batch使用spring批处理从csv文件中只读选择性列
【发布时间】:2015-10-12 07:43:22
【问题描述】:

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

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

请建议我们在这种情况下如何处理

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    尝试使用自定义 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

    【讨论】:

    • 我的文件没有分隔符,但它是一个固定宽度的文件。如何选择特定范围?
    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 2021-07-16
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多