Spring批处理从后续步骤读取器中的作业上下文中检索数据

时间:2016-08-10 10:16:36

标签: spring-batch

我是春季批次的新手,只是寻找一些帮助在步骤之间传递列表。在我的第1步编写器中,我将向ExecutionContext添加一个列表。

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");
}

所以基本上我想要做的就是让我的读者在第二步中阅读第一步中我作家的作品列表。

1 个答案:

答案 0 :(得分:0)

我设法找到问题的根本原因。来自ItemReader API

  

读取一段输入数据并前进到下一个。实现必须在输入数据集的末尾返回null

我的读者从未返回null,因此它进入了无限循环。为了解决这个问题,我改变了它,所以一旦我发送了我想要的数据,我就会返回null。