1

我有自己的 Spring Batch Job ( MyTaskletJob ),它实现了我的接口IJobBase ,它实现了Tasklet

我的工作需要什么来实现另一种称为rollBack的方法

公共接口IJobBase扩展Tasklet {

 void rollBack();

}

公共类MyTaskletJob IJobBase{

    public RepeatStatus execute(StepContribution arg0, ChunkContext arg1){

            …}
    public void rollBack(){

            …}

}

弹簧配置:

<bean id="jobTaskletStep1" class="com....job.MyTaskletJob ">
    <property name="message" value="Hello..." />
</bean>
<batch:job id="backgroundJob">
<batch:step id="step0">
        <batch:tasklet ref="jobTaskletStep1"/>
        </batch:step>
</batch:job>

这是我运行我的工作的方式:

// 根据作业名创建作业

Job job = (Job) applicationContext.getBean(“backgroundJob”);

// 运行作业——jobLauncher将运行MyTaskletJob * execute * 方法

JobExecution myJobExecution = jobLauncher.run(job, jobParameters);

// 检查退出状态

If(myJobExecution.getExitStatus().equals(ExitStatus.FAILED)){

// 需要在MyTaskletJob上运行rollback()方法

我的问题是当 JobExecution FAILED 时如何调用方法 rollback() 方法

4

1 回答 1

0

简单的方法是使用 JobExecutionListener#afterJob(JobExecution)。您可以将对 jobTaskletStep1 的引用注入到侦听器中。从那里您可以检查 JobExecution 中设置的状态并根据需要调用该方法。

于 2013-03-12T04:03:58.120 回答