java - 如何将参数添加到 Spring Batch 项目阅读器?
问题描述
我觉得这是一件非常基本的事情,但我找不到有关如何做到这一点的文档。我找到的所有文档/示例都假定静态查询。我可以将其作为静态查询来执行,但我想知道如何使用变量来执行此操作。我正在尝试将 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 中是否包含一些东西来做到这一点?如果没有,我应该覆盖什么来添加此功能?
补充一点,这是需要批量处理的东西,因为它可能有数千条记录。
解决方案
我觉得这是一件非常基本的事情,但我找不到有关如何做到这一点的文档。
参考文档中的相关部分是作业和步骤属性的后期绑定,它提供了如何使用JobScope
和的代码示例StepScope
。这个想法是,您可以在运行时(而不是在配置时急切地)从作业参数或作业/步骤执行上下文中动态绑定您的阅读器中的查询属性。
希望这可以帮助。
推荐阅读
- r - parse_date_time 返回一个 NA 向量
- c# - 尝试在 SQL 字符串中使用 GUID 时出现语法错误
- bash - 在 WSL bash 脚本中将目录更改为 Window 的用户目录
- node.js - 如何用 Homebrew 的节点替换我的节点版本?
- c++ - 如何对对的向量进行排序
按第一个和第二个值? - python - 正则表达式匹配包含月份的日期范围
- sql - 获取两列,一列包含分组值,另一列不包含分组值
- javascript - 切换 TAB 时未调用 statusChanges
- python - Pandas 中的箱线图:带聚合的分组箱线图
- batch-file - 如何根据每个文件名中的文件夹名称将文件移动到现有文件夹?