Spring批处理JdbcPagingItemReader无限循环

Spring批处理JdbcPagingItemReader无限循环,spring,spring-batch,Spring,Spring Batch,我面临JdbcPagingItemReader的问题。我陷入了无休止的循环。我了解到该合同必须返回null,但我无法正确执行。有人能给我举个例子吗 public List<TransactionDTO> getTransactions(Integer chunk, LocalDateTime startDate, LocalDateTime endDate) throws Exception { final TransactionMapper

我面临JdbcPagingItemReader的问题。我陷入了无休止的循环。我了解到该合同必须返回null,但我无法正确执行。有人能给我举个例子吗

public List<TransactionDTO> getTransactions(Integer chunk, LocalDateTime startDate, LocalDateTime endDate)
            throws Exception {

        final TransactionMapper transactionMapper = new TransactionMapper();

        final SqlPagingQueryProviderFactoryBean sqlPagingQueryProviderFactoryBean = new SqlPagingQueryProviderFactoryBean();
        sqlPagingQueryProviderFactoryBean.setDataSource(dataSource);
        sqlPagingQueryProviderFactoryBean.setSelectClause(env.getProperty("sql.fromdates.select"));
        sqlPagingQueryProviderFactoryBean.setFromClause(env.getProperty("sql.fromdates.from"));
        sqlPagingQueryProviderFactoryBean.setWhereClause(env.getProperty("sql.fromdates.where"));
        sqlPagingQueryProviderFactoryBean.setSortKey(env.getProperty("sql.fromdates.sort"));

        final Map<String, Object> parametros = new HashMap<>();
        parametros.put("startDate", startDate);
        parametros.put("endDate", endDate);

        final JdbcPagingItemReader<TransactionDTO> itemReader = new JdbcPagingItemReader<>();
        itemReader.setDataSource(dataSource);
        itemReader.setQueryProvider(sqlPagingQueryProviderFactoryBean.getObject());
        // TODO esto debe ser el chunk
        itemReader.setPageSize(1);
        itemReader.setFetchSize(1);
        itemReader.setRowMapper(transactionMapper);
        itemReader.afterPropertiesSet();
        itemReader.setParameterValues(parametros);

        ExecutionContext executionContext = new ExecutionContext();
        itemReader.open(executionContext);
        List<TransactionDTO> list = new ArrayList<>();

        TransactionDTO primerDto = itemReader.read();
        while (primerDto != null) {
            list.add(itemReader.read());
        }
        itemReader.close();

        return list;

    }
public List getTransactions(整型块、LocalDateTime开始日期、LocalDateTime结束日期)
抛出异常{
final TransactionMapper TransactionMapper=新TransactionMapper();
最终SqlPagingQueryProviderFactoryBean SqlPagingQueryProviderFactoryBean=新SqlPagingQueryProviderFactoryBean();
sqlPagingQueryProviderFactoryBean.setDataSource(dataSource);
sqlPagingQueryProviderFactoryBean.setSelectClause(env.getProperty(“sql.fromdates.select”);
sqlPagingQueryProviderFactoryBean.setFromClause(env.getProperty(“sql.fromdates.from”);
sqlPagingQueryProviderFactoryBean.setWhere子句(env.getProperty(“sql.fromdates.where”);
sqlPagingQueryProviderFactoryBean.setSortKey(env.getProperty(“sql.fromdates.sort”));
final Map parametros=new HashMap();
参数put(“起始日期”,起始日期);
参数put(“endDate”,endDate);
final JdbcPagingItemReader itemReader=新JdbcPagingItemReader();
setDataSource(dataSource);
setQueryProvider(sqlPagingQueryProviderFactoryBean.getObject());
//TODO esto debe ser el chunk
itemReader.setPageSize(1);
itemReader.setFetchSize(1);
setRowMapper(transactionMapper);
itemReader.AfterPropertieSet();
itemReader.setParameterValues(ParameterOS);
ExecutionContext ExecutionContext=新的ExecutionContext();
打开(executionContext);
列表=新的ArrayList();
TransactionDTO primerDto=itemReader.read();
while(primerDto!=null){
list.add(itemReader.read());
}
itemReader.close();
退货清单;
}

您永远无法摆脱while循环。决不会重新分配
primerDto
。这与Spring Batch有什么关系?您正在使用一个组件,但在该组件旁边,不要对SpringBatch执行任何操作。如果不是在基于块的步骤中使用,为什么还要麻烦使用
JdbcPagingItemReader
?看起来您是在使用Spring批处理而不是使用它。哎呀,我真的很确信我没有很好地使用ItemReader接口:S。我必须重写一些代码才能真正使用Spring批处理。谢谢