1

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

下面的设置很简单,与http://static.springsource.org/spring-batch/reference/html/configureStep.html#mergingListsOnStep上的示例非常相似,但根据http://www.springframework.org/schema /batch/spring-batch.xsd,似乎听众不属于 step 而是属于 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 的抽象实例,对吗?

4

2 回答 2

1

根据 Spring Batch 2.1 XSD,您需要做的就是将您的第一个 baseLoggedStep 步骤示例抽象化(参见5.1.2.1. Abstract Step)。

请注意,如果您的子作业添加自己的侦听器,他们将不得不合并它们(请参阅5.1.2.2. 合并列表),否则您的抽象父步骤中的侦听器将被忽略。

于 2011-09-01T10:43:04.980 回答
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>
于 2014-03-10T17:09:13.927 回答