簡體   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