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

在Spring批次中将一个大步分解为多个步骤

司空健
2023-03-14

我是批处理领域的新手,我正在尝试使用Spring batch解决下面提到的问题。我真的很难从中创建多步骤批处理作业。

给予

包含多个学生记录的csv文件

我们有一个RESTendpoint,该endpoint记录学生在所有科目中的分数,并为每个学生返回结果(通过/失败)。通过/失败逻辑在给定的restendpoint中定义

待办事项

从csv中读取一批记录,每批进行一次REST调用,根据每个学生在所有三个科目中的分数更新结果。更新每个学生的结果,并为所有记录生成输出csv。

Class StudentMarksheet {
    String studentId;
    Integer subject1_score;
    Integer subject2_score;
    Integer subject3_score;
    String result;

    ...
}

Class GenerateResultRequestResponseDto {
    Long batchId
    List<StudentMarksheet> students;
    
    ...
}

最新要求

我们可以接收csv或xml文件。根据文件类型,我们有两种不同的读写器(一种用于读写csv文件,另一种用于xml文件类型)。

我的设计方案

读取单个记录并从中创建StudentMarksheet对象-

最大的问题是我要做两份工作一份给CSV

共有1个答案

上官霄
2023-03-14

由于REST endpoint在将学生写入文件之前会接受一个需要分块处理的学生列表,因此您可以使用ItemWriteListener#beforeWrite(list在其中进行调用。此侦听器是获取项目列表的第一个扩展点。因此,面向区块的步骤可以设计如下:

  • 项目阅读器:FlatFileItemReader,用于逐个阅读学生
 类似资料:
  • 给定一个使用分区的Spring批处理作业,是否可能有多个分区步骤? 例如: 在上述示例中,是否可以将另一个添加到(最好不需要为每个分区步骤提供分区器)?如果没有,是否有其他方法来配置多个步骤,这些步骤将针对每个分区逐个执行?

  • null 如果生成错误(文件不一致,文件不存在...),则不能执行 仅供参考,我使用的是没有XML配置的Spring批处理!只有注释:下面是我的作业配置类的样子:

  • 我能用一个ItemReader和多个子步骤编写一个Spring批处理步骤吗?每个步骤后面都有一个ItemProcessor和一个ItemWriter? 我正在努力实现这样的目标: 补充说明 为了避免前后矛盾,我宁愿不读两遍 我认为这个问题与Spring Batch不同:一个阅读器、多个处理器和编写器,因为我需要按顺序处理项目,而不是并行处理。

  • 我是Spring批次的新手。我需要在spring批处理中实现的任务如下: 需要从数据库读取一些元数据。 基于此元数据,我需要读取一些文件。 经过一些处理后,需要将这些值从文件写入数据库。 我的查询如下: c.另外,基于某些条件,我可能需要调用第三组阅读器。如何在步骤中有条件地调用读取器? 谢谢你看了我的帖子。我知道它很长。非常感谢任何帮助。另外,我想一个示例代码片段会帮助我更好地理解这一点。:)

  • 那么,如何将作业配置为先运行单个步骤,然后并行运行多个步骤,然后运行最后一个步骤呢?

  • 我不确定使用spring Batch是否可行。任何想法或我都无法实现它。谢谢。