Ich lese SO verwandte Fragen, aber die Lösungen funktionieren nicht für mich.Spring Batch: org.springframework.batch.item.ReaderNotOpenException: Reader muss geöffnet sein, bevor es gelesen werden kann
Ich bekomme die org.springframework.batch.item.ReaderNotOpenException: Reader must be open before it can be read
Ausnahme.
Unten ist meine Konfiguration:
@Bean
@StepScope
public ItemReader<Player> reader(@Value("#{jobParameters[inputZipfile]}") String inputZipfile) {
final String [] header = { .. this part omitted for brevity ... };
FlatFileItemReader<Player> reader = new FlatFileItemReader<Player>();
System.out.println("\t\t\t\t\t"+inputZipfile);
reader.setResource(new ClassPathResource(inputZipfile));
reader.setLineMapper(new DefaultLineMapper<Player>() {{
setLineTokenizer(new DelimitedLineTokenizer() {{
setNames(header);
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<Player>() {{
setTargetType(Player.class);
}});
}});
reader.setComments(header);
return reader;
}
@Bean
@StepScope
public ItemProcessor<Player, PlayersStats> processor(@Value("#{jobParameters[statType]}") String statType,
@Value("#{jobParameters[season]}") String season){
PlayersStatsProcessor psp = new PlayersStatsProcessor();
psp.setStatisticType(StatisticType.valueOf(statType));
psp.setSeason(season);
return psp;
}
@Bean
@StepScope
public ItemWriter<PlayersStats> writer(){
return new CustomWriter();
}
@Bean
public Job generateStatisticsJob() {
return this.jobs.get("generateStatisticsJob")
.incrementer(new RunIdIncrementer())
.start(processPlayerStats())
//.end()
.build();
}
@Bean
public Step processPlayerStats() {
return this.steps.get("processPlayerStats")
.<Player, PlayersStats> chunk(10)
.reader(reader(null))
.processor(processor(null,null))
.writer(writer())
.build();
}
Die inputZipFile Variable richtig eingestellt ist und die Datei vorhanden auf dem Laufwerk. Ich habe den FlatFileItemReader-Code eingecheckt und die ReaderNotOpenException tritt auf, wenn das Reader-Member der Reader-Klasse nicht gesetzt ist. Das Reader-Member wird in der doOpen-Methode festgelegt. Es sieht aus, dass doOpen nicht aufgerufen wird. Die Frage ist warum?
Aber kann der FlatFileItemReader zip-Dateien lesen? –
inputZipFile ist ein Rest. Ich übermittle TXT-Datei. – Luke