[英]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.