【问题标题】:Customize parameters of a step in Spring Batch application在 Spring Batch 应用程序中自定义步骤的参数
【发布时间】:2020-02-26 09:19:02
【问题描述】:

我正在使用 Spring Batch(使用 Spring Boot)。 我的要求是从数据库读取数据,处理它(验证和东西)并将其写入文件。我正在尝试使用批处理步骤来实现这一点。

问题是,如果我定义了一个步骤,阅读器、处理器和编写器应该具有相似的参数。(从我看到的示例和我得到的错误)就像我的阅读器返回一个 db域对象,处理器和编写器应该具有域对象参数。

我正在寻找的是,读者应该返回域对象,处理器应该接收域对象并将其转换为 dto/pojo(在验证和数据转换之后)并返回 dto 对象。 Writer 应该接收 dto 对象并将其写入文件。

请告诉我是否可以在单个批处理步骤中使用不同类型的参数。如果是这样,请给我任何示例/链接。

【问题讨论】:

标签: java spring spring-boot spring-batch


【解决方案1】:

转换项目是项目处理器的典型用例。以下是文档ItemProcessor 部分的摘录:

ItemProcessor 很简单。给定一个对象,转换它并返回另一个。提供的对象可能是也可能不是同一类型

因此,在您的情况下,阅读器可以将由项目处理器转换为 DTO 的域对象返回。然后编写器将获取 DTO 并将它们写入文件。这是一个将数字转换为字符串的简单示例:

@Bean
public ItemReader<Integer> itemReader() {
    return new ListItemReader<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
}

@Bean
public ItemProcessor<Integer, String> itemProcessor() {
    return item -> "foo" + item;
}

@Bean
public ItemWriter<String> itemWriter() {
    return items -> {
        for (String item : items) {
            System.out.println("item = " + item);
        }
    };
}

@Bean
public Step step() {
    return stepBuilderFactory.get("step")
            .<Integer, String>chunk(5)
            .reader(itemReader())
            .processor(itemProcessor())
            .writer(itemWriter())
            .build();
}

【讨论】:

  • 谢谢马哈茂德!!我可以通过正确阅读基础知识来避免这个问题。现在我很清楚了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2019-11-24
  • 2021-02-20
相关资源
最近更新 更多