当前位置: 首页 > 知识库问答 >
问题:

spring批处理在下一步骤阅读器中从作业上下文检索数据

潘向明
2023-03-14

我是新的spring批处理,只是寻找一些帮助通过一个步骤之间的列表。在step 1 writer中,我将向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");
}

所以基本上,我要做的是让我的读者在第二步中阅读我的writer在第一步中生成的列表。

共有1个答案

阮星火
2023-03-14

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

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

我的阅读器从来没有返回null,所以它进入了一个无限循环。为了修复,我修改了它,所以一旦我发送了我想要的数据,我就返回NULL。

 类似资料:
  • 目前,我使用jobParameters获取FlatFileItemReader和FlatFileItemWriter的文件名。测试我的批处理是可以的,但是我的目标是读取某个目录中的文件(这个目录中只有这个文件),并且文件名可能会更改。输出文件名应该依赖于输入文件名。 因此,我考虑在我的工作中添加一个新的步骤,这个步骤将通过搜索好的目录并向其中查找文件来设置输出和输入文件名。我从Spring Doc

  • 我使用的是SpringBatch 3.0。3并且需要一些关于不序列化作业执行上下文和步骤执行上下文的说明,因为我们有大型对象集,不希望将它们持久化到spring批处理表中。我们是否可以只存储短上下文而不是序列化对象?

  • 我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp

  • 我正在开发一个Spring批处理作业,它使用MultiResourcePartitioner并行处理多个输入文件。在ItemProcessor中,我需要获取当前输入文件中的记录数。我从步骤上下文中获取当前文件名,并读取文件中的行数: 这一切似乎工作,但我得到例外时,从处理器线程访问步骤上下文: 有没有办法从分区作业的处理器获取当前输入文件名? 下面是相关配置:

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以点击 或 来将已选择的工作或所有工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除已选择工作或所有工作,请点击 或 。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可在已选择的工作列表中拖拉工作到所需的位