首页 > 解决方案 > 在 Spring Batch 应用程序中自定义步骤的参数

问题描述

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

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

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

请让我知道这是否可能在单个批处理步骤中具有不同类型的参数。如果是这样,请给我任何示例/链接。

标签: javaspringspring-bootspring-batch

解决方案


转换项目是项目处理器的典型用例。这是文档的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();
}

推荐阅读