【发布时间】:2019-03-13 00:13:29
【问题描述】:
在我的 spring 批处理代码中,我正在读取一个 csv 文件,将其处理成一个 bean 并尝试在 writer 中获取具有值的 bean。但我无法在作家中获得豆子。 UserVO 是具有来自 csv 文件的值的 bean,我试图将其写入 writer。我也将 bean 初始化为一个公共变量,希望它能被读取器、处理器和写入器处理。甚至在UserVO user = new UserVO(); 之前使用了@Bean 和@Autowired 注释。请帮我解决这个问题。以下是我的代码,
@EnableBatchProcessing
@Configuration
public class CsvFileToDatabaseConfig {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public DataSource dataSource;
UserVO user = new UserVO();
@Bean
public FlatFileItemReader<UserVO> csvReader() {
FlatFileItemReader<UserVO> reader = new FlatFileItemReader<UserVO>();
try{
reader.setResource(new ClassPathResource("user.csv"));
reader.setLineMapper(new DefaultLineMapper<UserVO>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(new String[] { "memberId", "mailId", "fullName", "appCode", "active"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<UserVO>() {{
setTargetType(UserVO.class);
}});
}});
}
catch(Exception e){
System.out.println(" Exception in reading " + e.getMessage());
}
return reader;
}
@Bean
ItemProcessor<UserVO, UserVO> csvProcessor() {
return new Processor();
}
@Bean
public JdbcBatchItemWriter<UserVO> csvWriter(UserVO user) {
JdbcBatchItemWriter<UserVO> csvWriter = new JdbcBatchItemWriter<UserVO>();
System.out.println("MEMBER ID --->" + user.memberId);
return csvWriter;
}
@Bean
public Step csvFileToDatabaseStep() throws Exception {
LDSService ldsService = new LDSService();
return stepBuilderFactory.get("csvFileToDatabaseStep")
.<UserVO, UserVO>chunk(1)
.reader(csvReader())
.processor(csvProcessor())
.writer(csvWriter(user))
.build();
}
@Bean
Job csvFileToDatabaseJob(JobCompletionNotificationListener listener) throws Exception {
return jobBuilderFactory.get("csvFileToDatabaseJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(csvFileToDatabaseStep())
.end()
.build();
}
}
【问题讨论】:
-
您的阅读器创建
UserVo实例,这些实例被传递给处理器,最后传递给编写器。那么,到底为什么你需要像现在这样分享它呢?显然你正在使用 Spring Batch。
标签: java spring spring-boot spring-batch