[英]Spring batch define FlatFileItemReader in class reader that implements ItemReader not in bean java conf
我有一个步骤,定义了读取器,处理器和写入器。
我想为每个人定义自己的类,供读者从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中遇到一个错误,该错误告诉:
类型SimpleStepBuilder的方法reader(ItemReader)不适用于参数(Reader)。
我在网上看到的所有示例都在config类中设置了阅读器,请帮忙!
我不确定您的文件名是如何生成的,但是也许您可以使用后期绑定来解决您的问题。 后期绑定使您可以在所需信息可用时实例化Spring Batch bean。 要使用后期绑定,请使用“常规” FlatFileItemReader
但作用域为“ step”。 就像是:
@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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.