Пакет Java: Как программно определить, какой раздел вы используете? - PullRequest
0 голосов
/ 12 сентября 2018

В пакете JSR-352 я хочу использовать разбиение. Я могу определить количество разделов через конфигурацию или реализовать PartitionMapper, чтобы сделать это.

Затем существуют инъекции JobContext и StepContext для предоставления контекстной информации для моей обработки. Тем не менее, нет PartitionContext или тому подобного, который поддерживает и предоставляет подробные сведения о разделе , в котором я работаю.

Отсюда вопрос:

Как сообщить каждому многораздельному экземпляру чанка , в каком разделе он запущен, чтобы его ItemReader мог читать только те элементы, которые принадлежат этому конкретному разделу?

Если я этого не сделаю, каждый раздел будет выполнять одну и ту же работу с одними и теми же данными, а не разбивать входные данные на n отдельных разделов.

Я знаю, что могу сохранить некоторый идентификатор в свойствах плана разбиения, который затем могу использовать для установки другого свойства в конфигурации шага, например <property name="partitionId" value="#{partitionPlan['partitionId']}" />. Но это кажется слишком сложным и хрупким, потому что мне нужно знать имя свойства из плана разбиения и не забывать всегда устанавливать другое свойство на это значение для каждого шага.

Нет ли другого, чистого, стандартного способа предоставления информации о разделах для шагов?

Или как еще разделить работу по разделам и назначить ее разным ItemReader экземплярам в одном и том же многораздельном фрагменте?

Обновление:

Похоже, что jberet имеет область действия CDI org.jberet.cdi.PartitionScoped , но это не является частью стандарта JSR.

1 Ответ

0 голосов
/ 12 сентября 2018

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

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

Например, пожалуйста, org.jberet.test.chunkPartitionFailComplete.xml из одного из тестовых приложений jberet.

...