Обрабатывать все линии одновременно с помощью пружинной партии - PullRequest
0 голосов
/ 04 марта 2020

Я пишу пакетную программу с использованием Spring batch, которая читает из Db, а затем записывает информацию в CSV-файл. Я уже использовал этот фреймворк раньше, но все остальные написанные мною программы имели такую ​​же структуру:
1 - чтение строки из db;
2 - обрабатывать линию индивидуально;
3 - записать строку в файл;
Но эта новая программа имеет другой лог c: я должен прочитать строки из БД, мне нужно обработать все из них (например, если я нашел несколько строк с одинаковым значением в поле А, мне нужно чтобы напечатать только одну строку с полем B, которое является суммой поля B других строк), а затем я должен написать. Можно ли сделать что-то подобное с помощью Spring batch? (любой пример, который я нашел, работает в одну строку).
Спасибо.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вместо работы с чанками (читателями, писателями, процессорами) Spring Batch также может работать с Тасклетами . Тасклет - это по сути один метод, который делает все.

public class YourTasklet implements Tasklet {


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


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


}

Возможно, вы захотите прочитать о тасклетах в официальной документации.

0 голосов
/ 05 марта 2020

Агрегатные функции требуют обработки всего набора данных для расчета. Модель обработки, ориентированная на фрагменты, не очень удобна для реализации такого рода функций, поскольку данные обрабатываются отдельными частями.

В вашем случае, поскольку данные считываются из базы данных, я бы оставил группировку / суммирование в база данных с чем-то вроде select sum(fieldB) ... group by fieldB. Базы данных хорошо оптимизированы для такого рода задач, и вам следует прочитать одну запись для каждой группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...