春季批处理同时处理所有生产线

时间:2020-03-04 11:26:58

标签: java spring spring-boot spring-batch

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

在您的情况下,由于是从数据库读取数据,因此我将使用类似select sum(fieldB) ... group by fieldB的方式将分组/汇总留给数据库。数据库已经针对此类任务进行了优化,您应该最终为每个组读取一条记录。