有一个csv文件有100列,但我们只需要3-5列需要加载到数据库中。
我不想在job xml中指定linetokenizer中的所有100列。
请建议我们如何处理此案例
答案 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