我觉得这是一件非常基本的事情,但是我找不到有关该操作方法的文档。我发现的所有文档/示例均假设静态查询。我可以将其作为静态查询来执行,但是我想知道如何使用变量。 我正在尝试将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是否包含某些功能?如果没有,我应该重写什么以添加此功能?
要添加的内容是需要分批处理的内容,因为它可能会成千上万条记录。
答案 0 :(得分:0)
如果您知道批处理开始时的参数,则将参数作为Jobparamters
传递。现在,您可以使用@ StepScope
访问Reader中的Jobparamters。
以下是用于在阅读器中访问作业参数的示例代码
@Bean
protected JdbcPagingItemReader<JpaEntitlement> itemReader(@Value("#{jobParameters['someparameter']}") String someparameter 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;
}
希望这会有所帮助
这类似于此question
答案 1 :(得分:0)
我觉得这是一件非常基本的事情,但是我找不到有关该操作方法的文档。
参考文档中的相关部分是Late Binding of Job and Step Attributes,其中提供了有关如何使用JobScope
和StepScope
的代码示例。这个想法是,您可以在最近的运行时(而不是在配置时急于)从作业参数或作业/步骤执行上下文中将查询属性动态绑定到读取器中。
希望这会有所帮助。