Spring batch 自定义itemreader引发ReaderNotOpenException

Spring batch 自定义itemreader引发ReaderNotOpenException,spring-batch,Spring Batch,我有一个定制的项目阅读器,如下所示 class MyReader implements ItemReader<MyBean>, ItemStream{ SingleItemPeekableItemReader<MyBean> myBeanPeekableReader; public SingleItemPeekableItemReader<MyBean> getMyBeanPeekableReader() { ret

我有一个定制的项目阅读器,如下所示

    class MyReader implements ItemReader<MyBean>, ItemStream{

    SingleItemPeekableItemReader<MyBean> myBeanPeekableReader;

    public SingleItemPeekableItemReader<MyBean> getMyBeanPeekableReader() {
        return myBeanPeekableReader;
    }

    public void setMyBeanPeekableReader(
            SingleItemPeekableItemReader<MyBean> myBeanPeekableReader) {
        this.myBeanPeekableReader = myBeanPeekableReader;
    }

    @Resource
    public void caller(ItemReader<MyBean> myJdbcReader){
        myBeanPeekableReader.setDelegate(myJdbcReader);
    }


    @Override
        public void close() throws ItemStreamException {
            myBeanPeekableReader.close();
        }

        @Override
        public void open(ExecutionContext arg0) throws ItemStreamException {
            myBeanPeekableReader.open(arg0);
        }

        @Override
        public void update(ExecutionContext arg0) throws ItemStreamException {
            // TODO Auto-generated method stub

        }
MyReader类实现ItemReader、ItemStream{ SingleItemPeakableItemReader MyBeanPeakableReader; public singleItemPeakableItemReader getMyBeanPeekableReader(){ 返回mybeanpeekablerheader; } 公共无效设置MyBeanPeekablerReader( SingleItemPeakableItemReader(MyBeanPeakableReader){ this.mybeanpeekablerreader=mybeanpeekablerreader; } @资源 公共无效调用方(ItemReader myJdbcReader){ setDelegate(myJdbcReader); } @凌驾 public void close()引发ItemStreamException{ mybeanpeekablerreader.close(); } @凌驾 public void open(ExecutionContext arg0)抛出ItemStreamException{ mybeanpeekablerreader.open(arg0); } @凌驾 公共无效更新(ExecutionContext arg0)引发ItemStreamException{ //TODO自动生成的方法存根 } 扩展JdbcCursorItemReader的类:

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

@Component("myJdbcReader")
public class MyJdbcReader extends JdbcCursorItemReader<MyBean> {


    private String sql = "Select * from mytable";

    MyJdbcReader(){
        super.setSql(sql);
    }

    @Override
    @Resource
    public void setDataSource(DataSource dataSource){
        super.setDataSource(dataSource);
    }

    @Override
    @Resource
    public void setRowMapper(RowMapper myRowMapper){
        super.setRowMapper(myRowMapper);
    }

    @Override
    @Resource
    public void setPreparedStatementSetter(PreparedStatementSetter myPrepSetter){
        super.setPreparedStatementSetter(myPrepSetter);
    }

}
import javax.annotation.Resource;
导入javax.sql.DataSource;
导入org.springframework.batch.item.database.jdbcursoritemreader;
导入org.springframework.jdbc.core.PreparedStatementSetter;
导入org.springframework.jdbc.core.RowMapper;
导入org.springframework.stereotype.Component;
@组件(“myJdbcReader”)
公共类MyJdbcReader扩展了JdbcCursorItemReader{
私有字符串sql=“从mytable中选择*”;
MyJdbcReader(){
super.setSql(sql);
}
@凌驾
@资源
public void setDataSource(数据源数据源){
super.setDataSource(数据源);
}
@凌驾
@资源
公共void setRowMapper(RowMapper myRowMapper){
super.setRowMapper(myRowMapper);
}
@凌驾
@资源
public void setPreparedStatementSetter(PreparedStatementSetter myPrepSetter){
super.setPreparedStatementSetter(myPrepSetter);
}
}

即使在实现ItemStream之后,它也会抛出异常ReaderNotFound。有人能告诉我哪里出了问题吗。

可能的重复项也请共享您的XML配置文件。您在应用程序中如何使用它们?能否发布异常堆栈跟踪?这是否回答了您的问题?