我的输入如下:
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
读取它,或者还有其他优雅的方法吗?
答案 0 :(得分:0)
我可以通过仅使用strict
将false
设置为DelimitedLineTokenizer
来解决它。
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="names" value="ID1,ID2,A_BOOL"/>
<property name="strict" value="false"/>
</bean>