繁体   English   中英

Spring批处理在类读取器中定义FlatFileItemReader,该类读取器不在bean java conf中实现ItemReader

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM