В моей исходной таблице 10 записей, и мне нужно прочитать 10 записей, обработать их и записать обработанные записи в целевую таблицу. Для этих 10 записей я создал 2 раздела. Но в моем реальном проекте мы не знаем, сколько записей ежедневно мне нужно обрабатывать, так как я могу решить, сколько разделов мне нужно? Можно ли динамически добавлять разделы? Пожалуйста, найдите мой poc-код в JSR 352. с профилем Liberty — как реализовать контрольные точки, когда ItemReader выполняет запрос к БД.
динамическое добавление разделов в WebSphere JSR 352
Ответы (1)
Используйте PartitionMapper для динамического определения количества разделов на этапе разделения.
Это запускается в начале шага и создает PartitionPlan, который определяет количество разделов и свойства для каждого раздела.
В XML ваш элемент <partition>
должен включать дочерний элемент <mapper>
, а не дочерний элемент <plan>
, который вы использовали бы для определения количества разделов. статически.
Но в противном случае вы выполняете замену аналогичным образом, используя замену свойства partitionPlan.
E.g.
<step id="mappedStep">
<batchlet ref="MyBatchlet">
<properties>
<property name="xx" value="#{partitionPlan['xx']}" />
</properties>
</batchlet>
<partition>
<mapper ref="MyMapper">
<properties>
<property name="mapperProp" value="#{jobProperties['mapperProp']}" />
</properties>
</mapper>
</partition>
</step>
Ваш PartitionMapper может построить PartitionPlan примерно так:
import javax.batch.api.partition.PartitionMapper;
import javax.batch.api.partition.PartitionPlan;
import javax.batch.api.partition.PartitionPlanImpl;
// ...
@Named("MyMapper")
public class MyPartitionMapper implements PartitionMapper {
@Inject @BatchProperty
String mapperProp; // FROM JSL, USE IF YOU WANT, NOT USED HERE
@Override
public PartitionPlan mapPartitions() throws Exception {
numPartitions = calculateNumPartitions() // YOUR LOGIC HERE
Properties[] props = new Properties[numPartitions];
Integer i;
for (i = 0; i < numPartitions; i++) {
props[i] = new Properties();
props[i].setProperty("xx", "xxVal" + i); // SUPPLY PER-PARTITION PROPERTY 'xx'
props[i].setProperty("yy", "yyVal" + i); // SUPPLY PER-PARTITION PROPERTY 'yy'
}
PartitionPlan partitionPlan = new PartitionPlanImpl();
partitionPlan.setPartitions(numPartitions);
partitionPlan.setPartitionProperties(props);
partitionPlan.setPartitionsOverride(false);
return partitionPlan;
}
}
person
Scott Kurz
schedule
06.06.2016
Спасибо Скотту за помощь. На самом деле я не могу найти ни одного примера кода для реализации сопоставления разделов. Не могли бы вы помочь мне, где я могу найти образец. Еще одна проблема, например, мне нужно передать разные параметры в каждый раздел для извлечения данных, поскольку моя исходная таблица имеет только метку времени, поэтому мне нужно передать строки меток времени с 12:00 до 18:00 в первый раздел и с 18:00 до 12:00 разделов на другой раздел.
- person Srinivas K; 10.06.2016
спасибо за вашу быструю помощь. Я попробую этот пример.
- person Srinivas K; 10.06.2016