Spring 在接下来的步骤中从作业上下文中批量检索数据 reader

Spring batch retrieving data from job context in the next steps reader

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

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

在第二步的 reader 中,我通过以下操作取回数据:

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

这行得通,我得到了列表,但我遇到的问题是我想将此列表传递给处理器,但是 ItemReader 中的 read() 方法不断循环 returning 列表,其中我只想 return 列表一次。当它这样做时,处理器也会循环。有没有一种方法可以在第二步中将列表传递给 reader 而无需 read() 方法执行此操作?下面是我的留言 reader

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

基本上我想做的是让我的 reader 在第二步中阅读我的作家在第一步中制作的列表。

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

Reads a piece of input data and advance to the next one. Implementations must return null at the end of the input data set

我的 reader 从来没有 returning null 所以它进入了一个无限循环。为了修复我改变了它所以一旦我发送了我想要的数据我 return null.