[英]How do I add parameters to a Spring Batch item reader?
我觉得这是一个非常基本的东西,但我找不到关于如何做的文档。 我发现的所有文档/示例都假定为静态查询。 我可以将其作为静态查询,但我想知道如何使用变量。 我正在尝试使用Postgres的Spring Batch。
我想要做的是这样的查询:
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中是否包含了这样的内容? 如果没有,我应该覆盖什么才能添加此功能?
要添加,这需要批量处理,因为它可能会有数千条记录。
如果您知道批处理开始时的参数, Jobparamters
参数作为Jobparamters
传递。 您现在可以使用StepScope
访问Reader中的StepScope
。 以下是用于访问阅读器中的作业参数的示例代码
@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;
}
希望这可以帮助
这与此问题类似
我觉得这是一个非常基本的东西,但我找不到关于如何做的文档。
参考文档的相关部分是作业和步骤属性的后期绑定,它提供了如何使用JobScope
和StepScope
代码示例。 我们的想法是,您可以在作业参数或作业/步骤执行上下文中最近在运行时(而不是急切地在配置时)动态地将查询属性绑定到读取器中。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.