dSh*_*ngi 7 java spring spring-batch
我正在使用spring批处理文件进行数据库处理,目前我正在使用PropertyEditors将分隔文件中的字符串转换为某个对象,如下所示.
Map<Class<?>, PropertyEditor> editors = new HashMap<>();
CustomDateEditor dateEditor = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true);
editors.put(Date.class, dateEditor);
Run Code Online (Sandbox Code Playgroud)
因此,如果我有一个Date字段,我使用CustomDateEditor并成功解析给定的格式日期字符串.但是,如果我在同一个文件中有更多日期字符串,格式不同,我无法解析它们.我需要的是将编辑器与字段相关联,那么有没有办法可以做到这一点?
如果我正确理解了这个问题,您希望两个不同的列具有不同的日期格式(而不是不同的行具有不同的格式)。您可以通过实现 FieldSetMapper 来做到这一点,如文档中所述。
@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;
}
Run Code Online (Sandbox Code Playgroud)
执行:
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;
}
Run Code Online (Sandbox Code Playgroud)
}