В пакете JSR-352 я хочу использовать разбиение. Я могу определить количество разделов через конфигурацию или реализовать PartitionMapper
, чтобы сделать это.
Затем существуют инъекции JobContext
и StepContext
для предоставления контекстной информации для моей обработки. Тем не менее, нет PartitionContext
или тому подобного, который поддерживает и предоставляет подробные сведения о разделе , в котором я работаю.
Отсюда вопрос:
Как сообщить каждому многораздельному экземпляру чанка , в каком разделе он запущен, чтобы его ItemReader
мог читать только те элементы, которые принадлежат этому конкретному разделу?
Если я этого не сделаю, каждый раздел будет выполнять одну и ту же работу с одними и теми же данными, а не разбивать входные данные на n
отдельных разделов.
Я знаю, что могу сохранить некоторый идентификатор в свойствах плана разбиения, который затем могу использовать для установки другого свойства в конфигурации шага, например <property name="partitionId" value="#{partitionPlan['partitionId']}" />
. Но это кажется слишком сложным и хрупким, потому что мне нужно знать имя свойства из плана разбиения и не забывать всегда устанавливать другое свойство на это значение для каждого шага.
Нет ли другого, чистого, стандартного способа предоставления информации о разделах для шагов?
Или как еще разделить работу по разделам и назначить ее разным ItemReader
экземплярам в одном и том же многораздельном фрагменте?
Обновление:
Похоже, что jberet имеет область действия CDI org.jberet.cdi.PartitionScoped , но это не является частью стандарта JSR.