Пакет 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.