我使用spring批处理文件进行数据库处理,目前我正在使用PropertyEditors将分隔文件中的字符串转换为某个对象,如下所示。
Map<Class<?>, PropertyEditor> editors = new HashMap<>();
CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true);
editors.put(Date.class, dateEditor);
因此,如果我有一个Date字段,我使用CustomDateEditor并成功解析给定的格式日期字符串。但是,如果我在同一个文件中有更多日期字符串,格式不同,我就无法解析它们。我需要的是将编辑器与字段相关联,那么我有办法做到这一点吗?
答案 0 :(得分:1)
如果我正确理解了这个问题,您希望两个不同的列具有不同的日期格式(不同的行具有不同的格式)。您可以通过实现FieldSetMapper来实现,如docs。
中所述@Bean
public FlatFileItemReader<Person> secondReader() {
FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
reader.setResource(new ClassPathResource("sample-data2.csv"));
reader.setLineMapper(new DefaultLineMapper<Person>() {
{
setLineTokenizer(new DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName", "lastName", "fDate", "sDate" });
}
});
setFieldSetMapper(new PersonMapper());
}
});
return reader;
}
实现:
public class PersonMapper implements FieldSetMapper<Person> {
@Override
public Person mapFieldSet(FieldSet fieldSet) throws BindException {
Person person = new Person();
person.setFirstName(fieldSet.readString("firstName"));
person.setLastName(fieldSet.readString("lastName"));
person.setFirstDate(fieldSet.readDate("fDate", "MM/dd/yyyy"));
person.setSecondDate(fieldSet.readDate("sDate", "dd-MMM-yyyy"));
return person;
}
}