如何调用tasklet的特定方法

时间:2015-06-11 14:26:06

标签: spring-batch

在工作环境中,有一种方法'参数所以a可以直接调用tasklet方法,如文档中所述"如果将tasklet指定为bean定义,则可以指定方法,并且POJO将适应Tasklet接口。建议的方法应该与Tasklet.execute(或子集)具有相同的参数,并且具有兼容的返回类型(boolean,void或RepeatStatus)。"我宣布了一个豆

    <step id="carregaStep" next="iniciaStep">
        <tasklet ref="atividadesTasklet" method="carregaAtividades"/>
    </step>

我声明了一个扩展Tasklet的bean,我实现了一个方法:

public RepeatStatus carregaAtividades(StepContribution contribution, ChunkContext chunkContext) throws Exception 

但是没有调用此方法。

我尝试搜索谷歌中的一个使用示例,但由于&#39;方法&#39;在一个常见的单词和谷歌无法搜索pontuation,如搜索&#34;方法=&#34;和&#34; tasklet&#34;。有人可以给我一个使用tasklet方法的例子吗?

<bean id="atividadesTasklet" class="br.mypackage.AtividadesTasklet" scope="step" />



public class AtividadesTasklet implements Tasklet{

    public RepeatStatus carregarAtividades(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        return RepeatStatus.FINISHED;   
    }


    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        return RepeatStatus.FINISHED;
    }   
}


    <step id="carregaAtividadesStep" >
        <tasklet ref="atividadesTasklet" method="carregarAtividades">

        </tasklet>
    </step>

1 个答案:

答案 0 :(得分:1)

这似乎是一个错误。您正在使用的配置样式:

<tasket ref="myTasklet" method="myMethod"/>

是配置MethodInvokingTaskletAdapter的简便方法。但是,该适配器不传递参数。如果您的方法没有参数,它就可以工作。我已记录问题BATCH-2397来跟踪此问题。

话虽如此,如果您愿意实施与Tasklet#execute签名相匹配的方法,那么我建议您只执行Tasklet接口并跳过此开销第一名。