Spring-batch: повторение шагов в чан-ориентированной обработке - PullRequest
0 голосов
/ 02 марта 2020

Мне интересно, можно ли настроить задание таким образом, чтобы я мог повторять несколько шагов по частям, пока не будут обработаны все данные? Предпосылкой является то, что мне нужно работать с действительно большими данными, и при их обработке существует риск нежелательных прерываний. Чтобы предотвратить перезапуск с нуля снова и снова, я хотел бы сделать несколько разделов данных, которые могут быть использованы для l oop по шагам. Из-за приведенных данных, к сожалению, невозможно использовать функцию перезапускаемой работы с подпружиненной загрузкой для достижения моей цели. Моя исходная база данных состоит из нескольких более или менее свободных связанных таблиц, каждая из которых обрабатывается на своем собственном этапе. Итак, у меня есть что-то вроде:

... omitting job-configuration ...
<batch:step="A" next="B">
   <batch:tasklet>
       <batch:chunk reader="readerA" writer="writerA" commit-interval="1000" />
   </batch:tasklet>
</batch:step>
<batch:step="B" next="C">
   <batch:tasklet>
       <batch:chunk reader="readerB" writer="writerB" commit-interval="5000" />
   </batch:tasklet>
</batch:step>
... some more steps with similar set-up...

Каждый читатель имеет свое собственное SQL -Statement, чтобы получить необходимые данные из source-db и запишет результат в другую таблицу target-db.

Теперь моя идея состоит в том, чтобы адаптировать эти SQL таким образом, чтобы данные были разделены на несколько непересекающихся, но согласованных (*) частей, чтобы я мог повторить обработку, используя шаги по частям, как перед. Может быть, только добавление некоторого «родительского шага» для контроля необходимости завершения l oop.

(*) Под «непересекающимся, но последовательным» я подразумеваю, что хотя данные на разных шагах извлекаются из разных таблиц есть зависимости. Например, выборка данных, которые будут обработаны для шага B, приведет к объединению с таблицей A, выбрав только те наборы, которые были успешно обработаны.

Спасибо за любые советы! / Андреас

1 Ответ

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

Поскольку существуют зависимости между таблицами, я не думаю, что параллельная работа является уместной. Идти параллельно, имеет смысл, когда разделы независимы друг от друга.

Ваша текущая настройка должна позволить вам возобновить работу с того места, где она остановилась на двух уровнях:

  • Между шагами: Если задание не выполнено на шаге B, то шаг A не будет повторно выполняться
  • На каждом шаге: если сбой задания выполняется в середине шага A, он будет перезапущен с последнего успешно принятого фрагмента шага A.

Необходимо обязательно использовать постоянный репозиторий заданий и перезапустить тот же экземпляр задания в случае сбоя (используя те же параметры задания идентификации, что и при предыдущем запуске).

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