Я чувствую, что это действительно простая вещь, но я не могу найти документы о том, как это сделать.Вся документация / примеры, которые я нахожу, предполагают статические запросы.Я могу сделать это как статический запрос, но я хочу знать, как сделать это с переменными.Я пытаюсь использовать Spring Batch с Postgres.
Я собираюсь сделать запрос, подобный следующему:
SELECT * from SOME_TABLE WHERE SOURCE = ? AND (EXPIRES BETWEEN ? AND ?)
Я пробовал различные способы написания запроса,например, замена вопросительных знаков такими переменными, как :source
.Я даже не уверен, использую ли я правильные ItemReader
классы или мне нужно написать свои собственные.Это мой конфиг:
@Bean
protected JdbcPagingItemReader<JpaEntitlement> itemReader(DataSource dataSource)
throws Exception {
JdbcPagingItemReader<JpaEntitlement> pagingItemReader = new JdbcPagingItemReader<>();
pagingItemReader.setDataSource(dataSource);
pagingItemReader.setPageSize(1);
PagingQueryProvider pagingQueryProvider = createQueryProvider(dataSource);
pagingItemReader.setQueryProvider(pagingQueryProvider);
pagingItemReader.setRowMapper(new BeanPropertyRowMapper<>(JpaClass.class));
return pagingItemReader;
}
private PagingQueryProvider createQueryProvider(DataSource dataSource) throws Exception {
SqlPagingQueryProviderFactoryBean pagingQueryProvider =
new SqlPagingQueryProviderFactoryBean();
pagingQueryProvider.setSelectClause("*");
pagingQueryProvider.setFromClause("FROM SOME_TABLE");
pagingQueryProvider.setWhereClause("WHERE SOURCE = ? AND (EXPIRES between ? AND ?)");
pagingQueryProvider.setDataSource(dataSource);
return pagingQueryProvider.getObject();
}
Наверное, главный вопрос заключается в следующем: есть ли что-то, что включено в Spring Batch для этого?Если нет, то что мне следует переопределить, чтобы добавить эту функциональность?
Чтобы добавить, это то, что нужно обрабатывать партиями, так как это потенциально может быть тысячи записей.