[英]Multiple SELECT SQLs for Spring Batch Reader - reader chaining
我需要在Spring Batch閱讀器中順序執行十一個SQL SELECT查詢。 這些SELECT SQL在很大的表上進行INNER JOIN
,並且通過WHERE
子句中的單個列名彼此進行比較。
所有這些閱讀器的輸出對象類型都是相同的,可以說VO
。
那么我該如何實現呢?
我可以在閱讀器中傳遞where子句String
,該子句將在查詢提供程序中進一步設置。
@Bean
public ItemReader<VO> reader(String whereClause, @Value("#{stepExecutionContext[partitionNumber]}") String partitionNumber){
}
我不確定如何構造Spring Batch步驟,該步驟在閱讀器中順序設置這11條SQL,然后也順序執行。 由於所有讀取器的輸出類型相同,因此將只有一個處理器和一個寫入器。
所有這些閱讀器的來源都是相同的數據庫表,由於分頁功能,我想使用JdbcPagingItemReader
。
我當前的閱讀器是分區步驟的一部分,其中String partitionNumber
是分區標准。
我要問的是,如果讀者的輸出類型是通用的,我可以將他們鏈接起來嗎? 如果這些閱讀器順序啟動,我沒有問題,但是我可以定義一個由單個處理器和編寫器的閱讀器鏈組成的步驟嗎?
請提出解決方案或更好的策略。
這是一種方法
下面是代碼片段
<job id="exampleJob" xmlns="http://www.springframework.org/schema/batch">
<step id="stepId">
<partition step="partitionerStepId" partitioner="examplePartitioner">
<handler grid-size="1" task-executor="syncTaskExecutor" />
</partition>
</step>
</job>
<step id="partitionerStepId" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk reader="exampleReader" writer="exampleWriter" processor="exampleProcessor" commit-interval="1"/>
</tasklet>
</step>
公共類ExamplePartitioner實現Partitioner {
@Override
public Map<String, ExecutionContext> partition(int gridSize) {
Map<String, ExecutionContext> queue = new HashMap<String, ExecutionContext>();
for (int i=0; i<NUMBER_QUERIES; i++) {
ExecutionContext ec = new ExecutionContext();
**ec.put("sql", [your query]);**
queue.put("item"+i, ec);
}
return queue;
}
}
注意:您的情況下,NUMBER_QUERIES為11。 注意:您可以將查詢內容存儲在安全的地方,也可以將其作為常量保留在類中。 我不太確定查詢是否有參數,因為您還沒有提到。
總而言之,分區程序將構建一個列表查詢,並將其放入ExecutionContext中,並通過“#{stepExecutionContext ['sql']}”將它們按順序依次傳遞給Reader。
謝謝,Nghia
注意:我在格式化閱讀器時遇到問題,這就是為什么我將其作為圖像放置。 注意:有關更多信息,請從此處參考鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.