gpt4 book ai didi

java - 如何将参数添加到 Spring Batch 项目阅读器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:51 30 4
gpt4 key购买 nike

我觉得这是一件非常基本的事情,但我找不到关于如何做的文档。我找到的所有文档/示例都假定静态查询。我可以将此作为静态查询来执行,但我想知道如何使用变量来执行此操作。我正在尝试将 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 中是否包含一些东西可以做到这一点?如果没有,我应该覆盖什么以添加此功能?

补充一点,这是需要批量处理的事情,因为它可能有数千条记录。

最佳答案

如果您知道批处理开始时的参数,则将参数作为 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

关于java - 如何将参数添加到 Spring Batch 项目阅读器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53926342/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com