2017-02-07 5 views
1

Я хочу, чтобы в этом было четкое изображение.Spring Batch - gridSize

У меня есть 2000 записей, но я ограничиваю 1000 записей в главном для разбиения на разделы с помощью rownum с gridSize = 250 и разбиением на 5 ведомых, работающих на 10 машинах.

Предполагаю, что будет создано 1000/250 = 4 шага.

  1. Независимо от того, отправлена ​​ли информация о данных на 4 рабы, оставив 1 рабский простаивающий? Если число шагов больше, чем количество ведомых Java-процессов, я предполагаю, что данные будут в конечном итоге распределены по всем ведомым устройствам.
  2. После того, как все этапы завершены, будет ли освобождена память процесса slave java (все объекты освобождены из памяти, поскольку этот шаг существует)?
  3. Если все шаги завершены за 1000/250 = 4 шага, для обработки оставшихся 1000 записей , как я могу запустить свой новый экземпляр задания без , планировщик запускает задание.
+0

Показать код вашего разделителя. –

ответ

0

Поскольку вы не указали свой код Partitioner, я постараюсь ответить только на предположения.

Вы не должны предполагать о количестве шагов (я предполагаю 1000/250 = 4 шага будет создан), было бы число записей, которые создаются в java.util.Map<java.lang.String,ExecutionContext>, что вы вернетесь из partition метода Partitioner Interface ,

partition метод принимает gridSize как аргумент и его до вас, чтобы использовать этот параметр или нет, если вы решили сделать разбиение на разделы по другому параметру (вместо равномерного распределения count), тогда вы можете это сделать. В конце концов, количество разделов будет числом записей в возвращенной карте, а значения, хранящиеся в ExecutionContext, могут использоваться для извлечения данных в читателях и т. Д.

Далее вы можете выбрать о количестве шагов, которые будут запускаться параллельно устанавливая соответствующие TaskExecutor и concurrencyLimit значения, то есть вы можете создать 100 шагов в partition, но хотят, чтобы начать только 4 шагов параллельно, и это может очень хорошо быть достигнуто настройки конфигурации поверх разделителя.

Ответ # 1: Как уже указывалось, распределение данных должно быть закодировано вами в вашем читателе, используя информацию ExecutionContext, которую вы создали в разделителе. Это происходит не автоматически.

Ответ # 2: Не уверен, что именно вы имеете в виду, но да, после освобождения все освобождается и информация сохраняется в метаданных.

Ответ # 3: Как уже указывалось, все шаги будут созданы за один раз для всех данных. Какие шаги выполняются, для каких данных и сколько запустить параллельно можно контролировать с помощью считывателей и конфигурации.

Надеюсь, это поможет!

+0

Спасибо. Gary/Anyone, Не могли бы вы помочь мне запустить работу (java-процесс) с помощью другого java-процесса. Я могу вызвать и увидеть процесс java в диспетчере задач, но я не вижу работу, выполняемую в репозитории заданий (база данных).Пожалуйста, помогите мне – Rahman786

+0

У меня есть сообщение, отправленное на канал. Как я могу использовать jmsTemplate для отправки в очередь назначения. Channal имя: JMS Outbound: Rahman786