Пакет Java: Как программно определить, какой раздел вы используете?

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

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

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

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

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

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

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

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

Обновить:

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

1 ответ

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

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

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

Другие вопросы по тегам