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.
我是 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.