I have written a JobStepListener which needs to be executed before and after each step. However each job contains many steps (over 1000 steps) and it would be tedious to insert the listener inside each step, especially since I have multiple jobs which require this feature. So instead of writing each step like:
<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>
Is there a way to do it once like defining the job listener but for each 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>
Spring's Bean definition inheritance is what you are looking for. You need to define an abstract step definition in which you declare the common listener:
Then each step could inherit from the parent step: