我创建了一个扩展 JdbcPagingItemReader 的类。我里面有这个配置。
@PostConstruct
public void init() throws Exception {
setDataSource(dsSrv.getUserDataSource());
setPageSize(Integer.parseInt(pageSize));
setFetchSize(Integer.parseInt(pageSize));
setQueryProvider(queryProvider2(dsSrv.getUserDataSource()));
setRowMapper(rowMapper());
}
private PagingQueryProvider queryProvider2(DataSource ds) throws Exception {
SqlPagingQueryProviderFactoryBean queryProvider=new SqlPagingQueryProviderFactoryBean();
final Map<String, Order> sortKeys = new HashMap<>();
sortKeys.put("ID", Order.ASCENDING);
queryProvider.setDataSource(ds);
queryProvider.setSelectClause("*");
queryProvider.setFromClause("D_TABLE");
queryProvider.setWhereClause("ID = '5d7031e6-10f2-4247-b581-17b2fe96449a'");
queryProvider.setSortKeys(sortKeys);
return queryProvider.getObject();
}
问题是,第一次迭代时,查询按预期组装:SELECT TOP 10 * FROM D_TABLE WHERE (ID= '5d7031e6-10f2-4247-b581-17b2fe96449a')
第二次迭代后,我有这个查询: SELECT TOP 10 * FROM D_TABLE WHERE (ID = '5d7031e6-10f2-4247-b581-17b2fe96449a') AND ((ID > ?)) ORDER BY ID ASC
org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback; SQL 的未分类 SQLException [SELECT TOP 10 * FROM D_TABLE WHERE (ID = '5d7031e6-10f2-4247-b581-17b2fe96449a') AND ((ID > ?)) ORDER BY ID ASC]; SQL状态[空];错误代码[0];参数编号 1 未设置该值;嵌套异常为 com.microsoft.sqlserver.jdbc.SQLServerException:未设置参数号 1 的值。
如何避免这种情况?
谢谢你
@PostConstruct
public void init() throws Exception {
setDataSource(dsSrv.getUserDataSource());
setPageSize(Integer.parseInt(pageSize));
setFetchSize(Integer.parseInt(pageSize));
setQueryProvider(queryProvider(dsSrv.getUserDataSource()));
setRowMapper(rowMapper());
try {
afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
setSaveState(false);
}
对于异步步骤,必须设置 setSaveState(false),否则您可能会遇到类似的问题