微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Spring Batch:org.springframework.batch.item.ReaderNotOpenException:读者必须先打开才能读取

我读了相关的问题,但解决方案对我来说并不奏效.

我得到了org.springframework.batch.item.ReaderNotOpenException:读者必须打开才能读取异常.

以下是我的配置:

@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();
}

inputZipFile变量设置正确,文件存在于驱动器上.
我检查了FlatFileItemReader代码,并且ReaderNotOpenException发生在读者类的读者成员未设置时.读者成员设置为doOpen方法.
看起来doOpen不被调用.问题是为什么?

解决方法

当我将读取器bean的返回类型从Item更改为FlatFileItemReader时,问题消失了.我仍然不清楚为什么这是一个问题,因为chunk().reader()接受ItemReader作为输入.我假设有一些AOP魔术在引擎盖下,FlatFileReader init和返回类型匹配.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?