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