繁体   English   中英

如何向Spring Batch项目阅读器添加参数?

[英]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;
}

希望这可以帮助

这与此问题类似

我觉得这是一个非常基本的东西,但我找不到关于如何做的文档。

参考文档的相关部分是作业和步骤属性的后期绑定,它提供了如何使用JobScopeStepScope代码示例。 我们的想法是,您可以在作业参数或作业/步骤执行上下文中最近在运行时(而不是急切地在配置时)动态地将查询属性绑定到读取器中。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM