In my spring batch code, I am reading a csv file, processing it into a bean and trying to get the bean with values in writer. But I am unable to get the bean in writer. UserVO is the bean which has the values from csv file, which I am trying to get in writer. I initialized the bean as a common variable also, hoping that will be processed by reader ,processor and writer. Even used @Bean and @Autowired annotations before UserVO user = new UserVO();. Kindly help me solving this issue. Following is my code,
@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();
}
}
UserVoinstances, which are passed to the processor and finally to the writer. So why on earth would you need to share it like you do now? Apparently you are working around Spring Batch. - M. Deinum