Spring Batch JDBCPagingItemReader, ThreadPoolTaskExecutor и несколько модулей в OpenShift - PullRequest
4 голосов
/ 09 июля 2019

У нас есть пакетное приложение Spring с чанк-обработкой, которое читает записи из БД, обрабатывает их и вызывает службу / выполняет несколько вставок / обновляет несколько таблиц в БД в составе модуля записи.

JDBCPagingItemReader был использован как потокобезопасный, когда saveState имеет значение false.Ключ сортировки был установлен, чтобы потоки не пересекались друг с другом.Также уровень изоляции ISOLATION_READ_COMMITTED был использован для источника данных oracle и конфигурации JobRepository пакета Spring.

Несколько потоков, использующих ThreadPoolTaskExecutor, отлично работают в настоящее время в одном экземпляре.

Мыв конечном итоге следует развернуть это приложение Spring Boot в OpenShift, где приложение будет работать в нескольких PODS, т.е. в нескольких экземплярах приложения, которые все читают из одной таблицы.

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

Любые передовые практики в этом сценарии высоко ценятся.

Спасибоза ваше время.

1 Ответ

0 голосов
/ 16 июля 2019

Вы можете разделить таблицу и назначить каждый раздел для модуля. Затем каждый раздел обрабатывается многопоточным заданием. Таким образом, здесь есть две степени параллелизма: между модулями (несколько JVM) и внутри каждого модуля (несколько потоков).

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

Не было бы проблем параллелизма, если набор данных правильно разделен без перекрытия между разделами.

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