使用侦听器的Spring Batch基本步骤

时间:2010-09-07 10:54:30

标签: spring-batch

我想设置一个基本步骤,附加一个记录器监听器,以确保所有错误日志最终都在正确的文件中。

下面的设置非常简单,与http://static.springsource.org/spring-batch/reference/html/configureStep.html#mergingListsOnStep上提供的示例相似,但根据http://www.springframework.org/schema/batch/spring-batch.xsd,似乎听众不属于步骤,而是属于tasklet。

<step id="baseLoggedStep">
    <listeners>
        <listener>
            <bean class="org.example...StepLogListener"/>
        </listener>
    </listeners>
</step>

<step id="myJobStep" parent="baseLoggedStep">
... 
</step>

那么,谁是正确的,我如何使用正确的xsd来产生所需的结果?

以下基本步骤似乎可以解决问题,其中StepLogListener侦听器实现了StepExecutionListener。

<batch:step id="baseLoggedStep" abstract="true">
    <batch:tasklet>
        <batch:listeners>
            <batch:listener ref="stepLogListener">
                <bean class="com.bossmedia.gem.platform.batch.StepLogListener"/>
            </batch:listener>
        </batch:listeners>
    </batch:tasklet>
</batch:step>

然而,它似乎不是最佳的,坦率地说并不完全正确。这意味着baseLoggedStep是TaskletStep的抽象实例吗?

2 个答案:

答案 0 :(得分:1)

根据Spring Batch 2.1 XSD所有你需要做的就是让你的第一个baseLoggedStep步骤示例摘要(参见5.1.2.1. Abstract Step)。

请注意,如果您的子作业添加了自己的侦听器,则必须将它们合并(请参阅5.1.2.2. Merging Lists),否则将忽略抽象父步骤中的侦听器。

答案 1 :(得分:1)

刚刚将这个Spring Batch Step Execution Listener的例子放在那里,因为我没有在网上找到一个好的。另外,Spring参考示例不会按照书面形式运行。

<beans:bean id="customStepExecutionListener" class="com.foo.MyCustomStepExecutionListener" />
<beans:bean id="customJobExecutionListener" class="com.foo.MyCustomJobExecutionListener" />

<!-- Abstract step listener must be defined outside job -->     
<step id="abstractListeningStep" abstract="true">
    <!-- Must be inside tasklet, but tasklet does not affect firing order -->
    <tasklet>
        <listeners>
            <listener ref="customStepExecutionListener" />
        </listeners>
    </tasklet>  
</step>

<!-- The job -->
<job id="myJob">
    <description>My Job</description>

    <listeners>
        <!-- Any job specific listeners here -->
        <listener ref="customJobExecutionListener" />
    </listeners>

    <!-- Start here -->
    <step id="myFirstStep" parent="abstractListeningStep">
        <!-- Your work/jobs/tasklets here -->
    </step>
</job>