如何在Spring批处理中读取具有不同列数的多行文件

时间:2020-06-10 11:14:32

标签: spring-batch

我的输入如下:

1234,9999232
342424,888922,true
45333,799999

就像id_1, id_2, a_bool,其中a_bool是可选的。 FieldSetMapper读取令牌并在模型中设置值。 行标记化逻辑如下:

<bean id="inputLineTokenizers"
      class="org.springframework.batch.item.file.transform.PatternMatchingCompositeLineTokenizer">
    <property name="tokenizers">
        <map>
            <entry key="*,*" value-ref="ID1_ID2_TOKENIZER"/>
            <entry key="*,*,*" value-ref="ID1_ID2_ABOOL_TOKENIZER"/>
        </map>
    </property>
</bean>
<bean id="parentLineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
    <property name="delimiter" value=","/>
</bean>
<bean id="ID1_ID2_TOKENIZER" parent="parentLineTokenizer">
    <property name="names" value="id1,id2"/>
</bean>
<bean id="ID1_ID2_ABOOL_TOKENIZER" parent="parentLineTokenizer">
    <property name="names" value="id1,id2,aBool"/>
</bean>

但是问题出在给定的文件位于顶部,它会引发关于缺少第三个参数的记录缺少索引的异常。

我该如何解决?通过检查是否存在第三个索引,然后以FieldSetMapper读取它,或者还有其他优雅的方法吗?

1 个答案:

答案 0 :(得分:0)

我可以通过仅使用strictfalse设置为DelimitedLineTokenizer来解决它。

<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
    <property name="names" value="ID1,ID2,A_BOOL"/>
    <property name="strict" value="false"/>
</bean>