spring batch:如何调用我的 RollBack 实现

Posted

技术标签:

【中文标题】spring batch:如何调用我的 RollBack 实现【英文标题】:spring batch: How To call my RollBack implementation 【发布时间】:2013-02-22 08:29:53 【问题描述】:

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

我的工作需要什么来实现另一个名为 rollBack

的方法

公共接口 IJobBase 扩展 Tasklet

 void rollBack();

公共类MyTaskletJob IJobBase

    public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)

            …
    public void rollBack()

            …

Spring 配置:

<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()方法

【问题讨论】:

【参考方案1】:

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

【讨论】:

我怎样才能注入对作业jobTaskletStep1的引用

以上是关于spring batch:如何调用我的 RollBack 实现的主要内容,如果未能解决你的问题,请参考以下文章

Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?

关于这个 Spring Batch @Scheduled() 注解以及如何手动启动 Spring Batch 作业的一些疑问?

如何防止我的 Spring Boot Batch 应用程序在执行测试时运行?

Spring 集成调用 Spring Batch

Java Spring Batch:如何验证执行是并行完成的?

如何确保 SFTP 会话始终在 spring-batch 结束时关闭