使用 spring 批处理同时处理所有行

Process all lines at the same time with spring batch

我正在编写一个批处理程序,使用 Spring 批处理,从 Db 读取信息,然后将信息写入 csv 文件。我之前已经使用过这个框架,但我编写的所有其他程序都具有相同的结构:
1- 从数据库中读取一行;
2- 单独处理行;
3- 将行写入文件;
但是这个新程序有不同的逻辑:我需要从 Db 中读取行,我必须处理所有这些行(例如,如果我在字段 A 中发现多行具有相同的值,我需要只打印一行,字段 B 是其他行字段 B 的总和),然后我必须写。是否可以用 Spring batch 做这样的事情? (我发现的任何例子都适用于单行)。
谢谢。

除了使用块(读取器、写入器、处理器),Spring Batch 还可以使用 Tasklets。 Tasklet 本质上是一种方法,它可以完成所有事情。

public class YourTasklet implements Tasklet {


    public RepeatStatus execute(StepContribution contribution,
                                ChunkContext chunkContext) throws Exception {


        // TODO do everything you want here 
        return RepeatStatus.FINISHED;
    }


}

您可能想在 the official documentation.

中阅读有关 tasklet 的内容

聚合函数需要处理整个数据集才能进行计算。面向块的处理模型对于实现这种功能不是很友好,因为数据是在单独的块中处理的。

在你的例子中,由于数据是从数据库中读取的,我会把 grouping/summing 留给数据库,比如 select sum(fieldB) ... group by fieldB。数据库针对此类任务进行了很好的优化,您最终应该为每个组读取一条记录。