Как получить доступ к свойствам раздела в java ee batch / jberet - PullRequest
1 голос
/ 12 марта 2020

У меня задание определено, как показано ниже:

<step id="file-transfer">
    <chunk checkpoint-policy="item" item-count="10" retry-limit="10">
        <reader ref="allTrusteeCustomerFilesReader">
            <properties>
                <property name="part-page-first-offset" value="#{partitionPlan['part-page-first-offset']}"/>
                <property name="part-page-last-offset" value="#{partitionPlan['part-page-last-offset']}"/>
                <property name="part-page-length" value="#{partitionPlan['part-page-length']}"/>
                <property name="part-sort-field" value="#{partitionPlan['part-sort-field']}"/>
                <property name="part-sort-ascending" value="#{partitionPlan['part-sort-ascending']}"/>
            </properties>
        </reader>
        <processor ref="customerFileLocalToGoogleStorageProcessor"/>
        <writer ref="customerFileWriter">
            <properties>
                <property name="set-google-cloud-migrated" value="true"/>
            </properties>
        </writer>


        <skippable-exception-classes>
            <include class="be.valuya.gestemps.server.file.batch.error.NoLocalStorageDataException"/>
            <include class="be.valuya.gestemps.server.file.batch.error.TargetAlreadyPresentException"/>
            <include class="be.valuya.gestemps.server.file.batch.error.CustomerFileAlreadyMigratedException"/>
        </skippable-exception-classes>
        <retryable-exception-classes>
            <include class="be.valuya.gestemps.server.file.batch.error.TransferToGoogleFailedException"/>
        </retryable-exception-classes>
    </chunk>

    <partition>
        <mapper ref="customerFilePartitionMapper"/>
    </partition>

    <end on="COMPLETED"/>
</step>

Связанные преобразователи создают массив свойств с определенными значениями и возвращают его:

    PartitionPlanImpl partitionPlan = new PartitionPlanImpl();
    partitionPlan.setPartitions(partitionCount);
    partitionPlan.setPartitionProperties(partitionProperties);

    return partitionPlan;

Правильно вызывается при запуске шага и возвращает свойства с заданными правильными ключами.

Однако я не могу получить свойства плана разбиения из моего шага чтения. Ни свойства контекста задания, ни свойства контекста шага не содержат ничего. Я не вижу ошибки в консоли. Параметры экземпляра задания содержат только параметры, установленные во время выполнения. Ни один из имен параметров / свойств не конфликтует. Попытайтесь внедрить их, используя @BatchProperty, оставьте поля пустыми.

Пакет запускается следующим образом:

    Properties properties = new Properties();
    // Fill parameters...
    long executionId = jobOperator.start(jobName, properties);

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

План разбиения помещал целые числа в карту Properties. Кажется, ожидаются строки:

//
Properties partProperties;
partProperties.setProperty("plan-property", "20"); // <--- Use setProperty to enforce String values rather than put
// ...

PartitionPlanImpl partitionPlan = new PartitionPlanImpl();
partitionPlan.setPartitions(partitionCount);
partitionPlan.setPartitionProperties(partitionProperties);

return partitionPlan;
0 голосов
/ 14 марта 2020

Чтобы увидеть свойства раздела в работе, вам нужно добавить свойства считывателя элементов в ваш класс чтения элементов. Например,


public class AllTrusteeCustomerFilesReader implements ItemReader {
  @Inject
  @BatchProperty(name = "part-page-first-offset")
  String partPageFirstOffset;

...
}

В указанном выше поле partPageFirstOffset будет храниться значение свойства средства чтения элементов part-page-first-offset, которое определено в задании. xml для ссылки на свойство раздела part-page-first-offset.

...