我有一个步骤,我定义了读者,处理器和作家。
我想为每个人定义他自己的类,让读者从CSV文件中获取数据:
public class Reader implements ItemReader<FlatFileItemReader<PersonneDTO>>, StepExecutionListener{
private String file;
@Override
public void beforeStep(StepExecution stepExecution) {
file = (String) stepExecution.getJobExecution().getExecutionContext().get("personneFile");
}
@Override
public FlatFileItemReader<PersonneDTO> read()
throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
FlatFileItemReader<PersonneDTO> reader = new FlatFileItemReader<PersonneDTO>();
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new DefaultLineMapper<PersonneDTO>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] {"nom", "prenom" ,"dateNaissance" });
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<PersonneDTO>() {{
setTargetType(PersonneDTO.class);
}});
}});
return reader;
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
return null;
}
}
在配置java中我有
@Bean
public Step stepTraitementFile() {
return stepBuilderFactory.get("step1")
.<PersonneDTO, Personne> chunk(1)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Reader reader() {
return new Reader();
}
配置java中有一个错误告诉:
类型中的方法读取器(ItemReader) SimpleStepBuilder不适用于 争论(读者)。
我在网上看到的所有示例都在配置类中设置了阅读器,请帮助!
答案 0 :(得分:0)
我不确定您的文件名是如何生成的,但也许您可以使用late binding来解决您的问题。后期绑定允许您在所需信息可用时稍后实例化Spring Batch bean。要使用后期绑定,请使用“常规”FlatFileItemReader
但使用“步骤”范围。类似的东西:
@Bean
@StepScope
public FlatFileItemReader<PersonneDTO> reader(@Value("#{jobExecutionContext['personneFile']}") String pathToDFile) {
FlatFileItemReader<PersonneDTO> reader = new FlatFileItemReader<PersonneDTO>();
reader.setResource(new FileSystemResource(pathToDFile));
reader.setLineMapper(new DefaultLineMapper<PersonneDTO>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] {"nom", "prenom" ,"dateNaissance" });
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<PersonneDTO>() {{
setTargetType(PersonneDTO.class);
}});
}});
return reader;
}