Как новичок в API пакетной обработки (JSR-352), я испытываю некоторые трудности с моделированием следующего (упрощенного) сценария:
- Предположим, у нас есть
Batchlet
, который создает динамический набор файлов в первомstep
. - Через секунду
step
все эти файлы должны быть обработаны индивидуально заchunk
s (черезItemReader
,ItemProcessor
иItemWriter
), в результате чего будет получен новый набор файлов. . - В третьем
step
эти новые файлы нужно упаковать в один большой архив.
Я не смог найти способ определить второй шаг, потому что спецификация, похоже, не предоставляет конструкцию цикла (и, насколько я понимаю, partition
, split
и flow
работают только для набор с известным фиксированным размером).
Как могло выглядеть XML-определение вакансии? Должен ли я отказаться от идеи разделения второго шага или мне нужно разделить задачу на несколько заданий? Есть другой вариант?
1 ответ
Вы можете использовать PartitionMapper a> , чтобы программно определить динамическое количество разделов для шага с разделами.
Программе сопоставления необходимо создать объект PartitionPlan , который задает количество разделов и предоставляет свойства для каждого раздела.
Метод mapPartitions () вашего картографа будет выглядеть примерно так:
public PartitionPlan mapPartitions() throws Exception {
int numPartitions = // calculate number of partitions, however you want
// create an array of Properties objects, one for each partition
Properties[] props = new Properties[numPartitions];
for (int i = 0; i < numPartitions; i++) {
// create a Properties object for this partition
props[i] = new Properties();
props[i].setProperty("abc", ...);
props[i].setProperty("xyz", ...);
}
// use the built-in PartitionPlanImpl from the spec or your own impl
PartitionPlan partitionPlan = new PartitionPlanImpl();
partitionPlan.setPartitions(numPartitions);
// cet the Properties[] onto your plan
partitionPlan.setPartitionProperties(props);
return partitionPlan;
}
И затем вы можете ссылаться на значения свойств, специфичных для раздела, в такой подстановке (это аналогично тому, как вы ссылаетесь на статически определенные свойства раздела):
<batchlet ref="myBatchlet">
<properties>
<property name="propABC" value="#{partitionPlan['abc']}" />
<property name="propXYZ" value="#{partitionPlan['xyz']}" />
</properties>
</batchlet>
Похожие вопросы
Новые вопросы
jsr352
JSR 352: пакетные приложения для платформы Java