2016-08-10 67 views
0

我是Spring批處理新手,只是尋求一些幫助在步驟之間傳遞列表。在我的第一步作者中,我將一個列表添加到ExecutionContext中。Spring批處理檢索下一步驟中的作業上下文中的數據

ExecutionContext stepContext = this.stepExecution.getExecutionContext(); 
stepContext.put("messageList", messages); 

在從第二步我做獲得的數據傳回我的讀者:

JobExecution jobExecution = stepExecution.getJobExecution(); 
    ExecutionContext jobContext = jobExecution.getExecutionContext(); 
    this.messages= jobContext.get("messageList"); 

這個工作和我得到的名單,但我遇到的問題是,我想通過這個列表到處理器,但ItemReader循環的read()方法不斷返回列表,因爲我只想返回列表一次。當它這樣做時,處理器也會循環。有沒有一種方法可以在沒有read()方法的情況下將這個列表傳遞給讀者?貝婁是我的消息讀

public class MessageReader implements ItemReader<Object> { 

private Object messages; 
@Override 
public Object read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException { 

    return messages; 
} 
    @BeforeStep 
public void retrieveSharedStepDate(StepExecution stepExecution){ 
    JobExecution jobExecution = stepExecution.getJobExecution(); 
    ExecutionContext jobContext = jobExecution.getExecutionContext(); 
    this.messages= jobContext.get("messageList"); 
} 

所以基本上什麼即時試圖做的是讓我在兩個步驟閱讀器來閱讀是從我的作家在第一步中所產生的名單。

回答

0

我已經設法找到問題的根本原因。從ItemReader API

讀取一段輸入數據並前進到下一個。實現必須在輸入數據集的末尾返回空值

我的閱讀器從不返回null,因此它正在進入無限循環。爲了解決問題,我改變了它,所以一旦我發送了我想要的數據,我就返回null。

相關問題