有一个csv文件有100列,但我们只需要3-5列,需要加载到数据库中。
我不想在作业xml中指定linetokenizer中的所有100列。
在这种情况下,请建议我们如何处理
发布于 2015-10-12 20:28:57
尝试使用自定义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
https://stackoverflow.com/questions/33075758
复制相似问题