Могу ли я определить один общий StepListener для всех шагов? API пакетных заданий Java - PullRequest
1 голос
/ 03 октября 2019

Я написал JobStepListener, который должен выполняться до и после каждого шага. Однако каждое задание содержит много шагов (более 1000 шагов), и было бы утомительно вставлять слушатель внутри каждого шага, тем более, что у меня есть несколько заданий, которым требуется эта функция. Поэтому вместо написания каждого шага, например:

<step id="step_001" next="step_002">
    <listeners>
        <listener ref="jobStepMonitoring"/>
    </listeners>
    <batchlet ref="batchJob"/>
</step>
<step id="step_002" next="step_003">
    <listeners>
        <listener ref="jobStepMonitoring"/>
    </listeners>
    <batchlet ref="batchJob"/>
</step>
<step id="step_003">
    <listeners>
        <listener ref="jobStepMonitoring"/>
    </listeners>
    <batchlet ref="batchJob"/>
</step>

Есть ли способ сделать это один раз, например, определить слушателя задания, но для каждого шага?

    <listeners>
        <listener ref="jobStepMonitoring"/>
    </listeners>
    <step id="step_001" next="step_002">
        <batchlet ref="batchJob"/>
    </step>
    <step id="step_002" next="step_003">
        <batchlet ref="batchJob"/>
    </step>
    <step id="step_003">
        <batchlet ref="batchJob"/>
    </step>

1 Ответ

1 голос
/ 04 октября 2019

Spring's Наследование определения бина - это то, что вы ищете. Вам нужно определить абстрактное определение шага, в котором вы объявляете общего слушателя:

<step id="parent_step" abstract="true">
   <listeners>
      <listener ref="jobStepMonitoring"/>
   </listeners>
</step>

Тогда каждый шаг может наследоваться от родительского шага:

<step id="step_001" next="step_002" parent="parent_step">
   <!-- concrete step definition here -->
   <!-- the listener will be inherited and can be overridden if needed -->
</step>
...