2

我写了一个 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>
4

1 回答 1

1

Spring 的Bean 定义继承就是您要寻找的。您需要定义一个抽象步骤定义,在其中声明公共侦听器:

<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>
于 2019-10-04T08:12:55.977 回答