我在開發Spring批處理應用程序。我已經設置了一個使用ItemReader,ItemProcessor和ItemWriter的步驟。我的ItemReader執行一個HTTP請求,從API獲取json。處理器轉換其內容,最後作者將其保存到文本文件中。Spring批處理:根據itemReader中的結果執行作業
我正在從java調度程序執行此作業,其中我設置了itemReader用於執行HTTP請求(npag)的jobParameters。由於諮詢的API爲結果分頁,我想執行此作業的次數不確定,直到http請求的結果是沒有更多數據。
例子:
如果讀者確實HTTP請求(http://whatever/resource?npag=1)獲得:
[{"item1":"content1"}....{"item500":"content500"}]
由於500個項目組API進行分頁,我需要執行作業另一個時間,因爲可能我們有更多的數據。爲此,我更改資源中的npag參數(http://whatever/resource?npag=2)。
如果我得到的結果:
[]
沒有更多的數據,所以我想停止執行作業。
我的方法: 我試圖設置ItemReader一個jobParameter,讓我知道在計劃程序,如果我能停止或沒有做的請求。但在ItemReader中,我只知道如何讀取作業參數(帶有註解@StepCope),但不知道如何設置它。
摘要:我需要知道一個變量從作業之外的ItemReader設置好的值(從執行該作業調度程序)
任何想法?謝謝,
SOLUTION:
由於@HansjoergWingeier建議,做itemReader內的所有請求可以解決問題:
private String npag = 1;
@Override
public String read() throws Exception {
Map<String, String> vars = new HashMap<>();
while (npag > 0) {
vars.put("numPag", String.valueOf(npag));
String result = restTemplate.getForObject(urlAPI, String.class, vars);
if ("[]".equals(result)) {
return null;
} else {
npag++;
return result;
}
}
return null;
}
毫米好吧,所以你的意思是創建一個獨特的工作與步驟(和讀者),包括所有的要求,是嗎?我最初的想法是,這項工作是爲'npag'參數的每個值執行的,但我會考慮它。 – Emilio