2016-08-10 14 views
0

新しいバネバッチで、ステップ間のリストを渡すための助けが必要でした。私のステップ1の作家で、私はExecutionContextにリストを追加しています。私の読者で次のステップリーダーでジョブのコンテキストからデータを取得するSpringバッチ

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

ステップ2から私が実行して戻ってデータを取得しています:

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

これは動作し、私はリストを取得するが、私が午前問題は、私はこのリストを渡したいということですItemReaderのread()メソッドは、リストを一度返すだけで、リストを返すようにループします。これを行っている間、プロセッサもループします。これを行うread()メソッドなしで、ステップ2でリーダーにリストを渡す方法はありますか?ベローだから基本的にやろうとしているイムは、ステップ1で、私の作家から生成されたリストを読み取るためにステップ2で、私の読者を得ることが何であるかを私のメッセージリーダー

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を返すことはなかったので、無限ループに入っていました。修正するには、一度データを変更した後に、元のデータを送信した後にnullを返すようにしました。

関連する問題