在 Spring Batch 应用程序中自定义步骤的参数

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

试试这个modelmapper.org/getting-started也看看这个***.com/questions/47843039/… 【参考方案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();

【讨论】:

谢谢马哈茂德!!我可以通过正确阅读基础知识来避免这个问题。现在我很清楚了:)

以上是关于在 Spring Batch 应用程序中自定义步骤的参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring validation中自定义的校验错误提示信息如何支持国际化

使用 IntelliJ 在 Spring Boot 中自定义应用程序属性

Spring Batch 从相同的执行和步骤重新启动未完成的作业

在 Spring Boot 应用程序中嵌入带有作业定义的 Spring Batch Admin

在多个数据库上并行运行 Spring Batch

spring 4 中自定义 ExceptionTranslationFilter 来处理 REST AuthenticationException